KeyboardStatus GCKeyboard::GetInput() const { const auto lock = GetStateLock(); KeyboardStatus kb = {}; m_keys0x->GetState(&kb.key0x, keys0_bitmasks); m_keys1x->GetState(&kb.key1x, keys1_bitmasks); m_keys2x->GetState(&kb.key2x, keys2_bitmasks); m_keys3x->GetState(&kb.key3x, keys3_bitmasks); m_keys4x->GetState(&kb.key4x, keys4_bitmasks); m_keys5x->GetState(&kb.key5x, keys5_bitmasks); return kb; }
GCPadStatus GCPad::GetInput() const { const auto lock = GetStateLock(); ControlState x, y, triggers[2]; GCPadStatus pad = {}; if (!(m_always_connected->GetValue() || IsDefaultDeviceConnected())) { pad.isConnected = false; return pad; } // buttons m_buttons->GetState(&pad.button, button_bitmasks); // set analog A/B analog to full or w/e, prolly not needed if (pad.button & PAD_BUTTON_A) pad.analogA = 0xFF; if (pad.button & PAD_BUTTON_B) pad.analogB = 0xFF; // dpad m_dpad->GetState(&pad.button, dpad_bitmasks); // sticks m_main_stick->GetState(&x, &y); pad.stickX = static_cast<u8>(GCPadStatus::MAIN_STICK_CENTER_X + (x * GCPadStatus::MAIN_STICK_RADIUS)); pad.stickY = static_cast<u8>(GCPadStatus::MAIN_STICK_CENTER_Y + (y * GCPadStatus::MAIN_STICK_RADIUS)); m_c_stick->GetState(&x, &y); pad.substickX = static_cast<u8>(GCPadStatus::C_STICK_CENTER_X + (x * GCPadStatus::C_STICK_RADIUS)); pad.substickY = static_cast<u8>(GCPadStatus::C_STICK_CENTER_Y + (y * GCPadStatus::C_STICK_RADIUS)); // triggers m_triggers->GetState(&pad.button, trigger_bitmasks, triggers); pad.triggerLeft = static_cast<u8>(triggers[0] * 0xFF); pad.triggerRight = static_cast<u8>(triggers[1] * 0xFF); return pad; }
bool GCPad::GetMicButton() const { const auto lock = GetStateLock(); return (0.0f != m_mic->controls.back()->control_ref->State()); }
void GCPad::SetOutput(const ControlState strength) { const auto lock = GetStateLock(); m_rumble->controls[0]->control_ref->State(strength); }