void Gamepad::updateFromPlatformGamepad(const PlatformGamepad& platformGamepad) { for (unsigned i = 0; i < m_axes.size(); ++i) m_axes[i] = platformGamepad.axisValues()[i]; for (unsigned i = 0; i < m_buttons.size(); ++i) m_buttons[i]->setValue(platformGamepad.buttonValues()[i]); m_timestamp = platformGamepad.lastUpdateTime(); }
void NavigatorGamepad::gamepadDisconnected(PlatformGamepad& platformGamepad) { // If this Navigator hasn't seen any gamepads yet its Vector will still be empty. if (!m_gamepads.size()) return; ASSERT(platformGamepad.index() < m_gamepads.size()); ASSERT(m_gamepads[platformGamepad.index()]); m_gamepads[platformGamepad.index()] = nullptr; }
Gamepad::Gamepad(const PlatformGamepad& platformGamepad) : m_id(platformGamepad.id()) , m_index(platformGamepad.index()) , m_connected(true) , m_timestamp(platformGamepad.lastUpdateTime()) , m_axes(platformGamepad.axisValues().size(), 0.0) { unsigned buttonCount = platformGamepad.buttonValues().size(); for (unsigned i = 0; i < buttonCount; ++i) m_buttons.append(GamepadButton::create()); }
void UIGamepadProvider::platformGamepadDisconnected(PlatformGamepad& gamepad) { ASSERT(gamepad.index() < m_gamepads.size()); ASSERT(m_gamepads[gamepad.index()]); std::unique_ptr<UIGamepad> disconnectedGamepad = WTFMove(m_gamepads[gamepad.index()]); scheduleGamepadStateSync(); for (auto& pool : m_processPoolsUsingGamepads) pool->gamepadDisconnected(*disconnectedGamepad); }
void UIGamepadProvider::platformGamepadConnected(PlatformGamepad& gamepad) { if (m_gamepads.size() <= gamepad.index()) m_gamepads.resize(gamepad.index() + 1); ASSERT(!m_gamepads[gamepad.index()]); m_gamepads[gamepad.index()] = std::make_unique<UIGamepad>(gamepad); scheduleGamepadStateSync(); for (auto& pool : m_processPoolsUsingGamepads) pool->gamepadConnected(*m_gamepads[gamepad.index()]); }
Ref<Gamepad> NavigatorGamepad::gamepadFromPlatformGamepad(PlatformGamepad& platformGamepad) { unsigned index = platformGamepad.index(); if (index >= m_gamepads.size() || !m_gamepads[index]) return adoptRef(*Gamepad::create(platformGamepad).leakRef()); return *m_gamepads[index]; }
void NavigatorGamepad::gamepadConnected(PlatformGamepad& platformGamepad) { // If this is the first gamepad this Navigator object has seen, then all gamepads just became visible. if (m_gamepads.isEmpty()) { gamepadsBecameVisible(); return; } unsigned index = platformGamepad.index(); ASSERT(GamepadProvider::singleton().platformGamepads()[index] == &platformGamepad); // The new index should already fit in the existing array, or should be exactly one past-the-end of the existing array. ASSERT(index <= m_gamepads.size()); if (index < m_gamepads.size()) m_gamepads[index] = Gamepad::create(platformGamepad); else if (index == m_gamepads.size()) m_gamepads.append(Gamepad::create(platformGamepad)); }