void DemoScene::RenderPanel_InfoTab()

in agdk/game_controller/common/demo_scene.cpp [624:702]


void DemoScene::RenderPanel_InfoTab(const int32_t controllerIndex,
                                    const Paddleboat_Controller_Data &controllerData,
                                    const Paddleboat_Controller_Info &controllerInfo) {
    // Render vendorId/deviceId in green if they matched with a controller map entry,
    // white if using the generic controller map profile.
    ImVec4 deviceColor = ((controllerInfo.controllerFlags &
                           PADDLEBOAT_CONTROLLER_FLAG_GENERIC_PROFILE) != 0)
                         ? TEXTCOLOR_WHITE : TEXTCOLOR_GREEN;

    ImGui::TextColored(deviceColor, "Contr. Num.: %d - VendorId: 0x%x - ProductId: 0x%x",
                       controllerInfo.controllerNumber, controllerInfo.vendorId,
                       controllerInfo.productId);
    const uint32_t layout = controllerInfo.controllerFlags & PADDLEBOAT_CONTROLLER_LAYOUT_MASK;
    switch (layout) {
        case PADDLEBOAT_CONTROLLER_LAYOUT_STANDARD:
            ImGui::Text("Standard layout");
            break;
        case PADDLEBOAT_CONTROLLER_LAYOUT_SHAPES:
            ImGui::Text("Shapes layout");
            break;
        case PADDLEBOAT_CONTROLLER_LAYOUT_REVERSE:
            ImGui::Text("Reversed layout");
            break;
        case PADDLEBOAT_CONTROLLER_LAYOUT_ARCADE_STICK:
            ImGui::Text("Arcade layout");
            break;
        default:
            ImGui::Text("Unknown layout");
            break;
    }

    ImGui::Text("Left Flat X/Y %f, %f\nFuzz X/Y: %f, %f",
                controllerInfo.leftStickPrecision.stickFlatX,
                controllerInfo.leftStickPrecision.stickFlatY,
                controllerInfo.leftStickPrecision.stickFuzzX,
                controllerInfo.leftStickPrecision.stickFuzzY);

    ImGui::Text("Right Flat X/Y %f, %f\nFuzz X/Y: %f, %f",
                controllerInfo.rightStickPrecision.stickFlatX,
                controllerInfo.rightStickPrecision.stickFlatY,
                controllerInfo.rightStickPrecision.stickFuzzX,
                controllerInfo.rightStickPrecision.stickFuzzY);

    uint64_t dataTimestampDelta = controllerData.timestamp - mPreviousControllerDataTimestamp;
    // Convert to milliseconds and cast to 32 bits
    int32_t dataDeltaMS = static_cast<int32_t>((dataTimestampDelta / 1000));
    ImGui::Text("Controller data delta timestamp (ms): %d", dataDeltaMS);

    // Convert to milliseconds and cast to 32 bits
    int32_t dataMouseDeltaMS = static_cast<int32_t>((mMouseDataTimestampDelta / 1000));
    ImGui::Text("Mouse data delta timestamp (ms): %d", dataMouseDeltaMS);

    ImGui::Text("Last Keycode: %d   ", Paddleboat_getLastKeycode());
    ImGui::SameLine();

    if ((controllerInfo.controllerFlags & PADDLEBOAT_CONTROLLER_FLAG_BATTERY) != 0) {
        const char *batteryStatusString = "Unknown";
        switch (controllerData.battery.batteryStatus) {
            case PADDLEBOAT_CONTROLLER_BATTERY_UNKNOWN:
                break;
            case PADDLEBOAT_CONTROLLER_BATTERY_CHARGING:
                batteryStatusString = "Charging";
                break;
            case PADDLEBOAT_CONTROLLER_BATTERY_DISCHARGING:
                batteryStatusString = "Discharging";
                break;
            case PADDLEBOAT_CONTROLLER_BATTERY_NOT_CHARGING:
                batteryStatusString = "Not charging";
                break;
            case PADDLEBOAT_CONTROLLER_BATTERY_FULL:
                batteryStatusString = "Full";
                break;
        }
        ImGui::Text("Battery %.1f%%, %s",
                    controllerData.battery.batteryLevel * 100.0f, batteryStatusString);
    } else {
        ImGui::Text("No battery status available");
    }
}