| 332 | } |
| 333 | |
| 334 | void InputManager::read(const OsEvent &event) |
| 335 | { |
| 336 | InputDevice *dev; |
| 337 | InputEvent input_ev; |
| 338 | |
| 339 | switch (event.type) { |
| 340 | case OsEventType::BUTTON: { |
| 341 | const ButtonEvent ev = event.button; |
| 342 | |
| 343 | dev = device_from_type(ev.device_id, ev.device_num); |
| 344 | if (CE_UNLIKELY(dev == NULL)) |
| 345 | return; |
| 346 | |
| 347 | // Publish the event. |
| 348 | dev->set_button(ev.button_num, ev.pressed); |
| 349 | |
| 350 | input_ev.id = ev.button_num; |
| 351 | input_ev.type = ev.pressed ? InputEventType::BUTTON_PRESSED : InputEventType::BUTTON_RELEASED; |
| 352 | input_ev.value = VECTOR3_ZERO; |
| 353 | input_ev.device = dev; |
| 354 | |
| 355 | _events[_num_events++] = input_ev; |
| 356 | break; |
| 357 | } |
| 358 | |
| 359 | case OsEventType::AXIS: { |
| 360 | const AxisEvent ev = event.axis; |
| 361 | |
| 362 | dev = device_from_type(ev.device_id, ev.device_num); |
| 363 | if (CE_UNLIKELY(dev == NULL)) |
| 364 | return; |
| 365 | |
| 366 | Vector3 axis; |
| 367 | |
| 368 | if (ev.device_id == InputDeviceType::MOUSE) { |
| 369 | if (ev.axis_num == MouseAxis::CURSOR_DELTA) { |
| 370 | const Vector3 delta = _has_delta_axis_event ? |
| 371 | dev->axis(MouseAxis::CURSOR_DELTA) |
| 372 | : VECTOR3_ZERO |
| 373 | ; |
| 374 | |
| 375 | axis.x = delta.x + ev.axis_x; |
| 376 | axis.y = delta.y + ev.axis_y; |
| 377 | axis.z = 0.0f; |
| 378 | |
| 379 | _has_delta_axis_event = true; |
| 380 | } else { |
| 381 | axis.x = ev.axis_x; |
| 382 | axis.y = ev.axis_y; |
| 383 | axis.z = ev.axis_z; |
| 384 | } |
| 385 | } else if (ev.device_id == InputDeviceType::JOYPAD) { |
| 386 | axis.x = (f32)ev.axis_x / (f32)INT16_MAX; |
| 387 | axis.y = (f32)ev.axis_y / (f32)INT16_MAX; |
| 388 | axis.z = (f32)ev.axis_z / (f32)INT16_MAX; |
| 389 | |
| 390 | axis = deadzone(dev, ev.axis_num, axis); |
| 391 | } else { |
no test coverage detected