in agdk/game_controller/common/demo_scene.cpp [480:578]
void DemoScene::RenderPanel_ControlsTab(const int32_t controllerIndex,
const Paddleboat_Controller_Data &controllerData,
const Paddleboat_Controller_Info &controllerInfo) {
const uint32_t layout = controllerInfo.controllerFlags & PADDLEBOAT_CONTROLLER_LAYOUT_MASK;
if (layout == PADDLEBOAT_CONTROLLER_LAYOUT_ARCADE_STICK) {
RenderPanel_ControlsTab_ArcadeStick(controllerIndex, controllerData,
controllerInfo);
return;
}
if ((controllerInfo.controllerFlags & PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE) != 0) {
ImGui::Text(" Ptr X: %.0f Y: %.0f ", controllerData.virtualPointer.pointerX,
controllerData.virtualPointer.pointerY);
if ((controllerInfo.controllerFlags & PADDLEBOAT_CONTROLLER_FLAG_TOUCHPAD) != 0) {
bool touchpadDown = ((controllerData.buttonsDown & PADDLEBOAT_BUTTON_TOUCHPAD) !=
0);
ImVec4 touchpadColor = touchpadDown ? TEXTCOLOR_GREEN : TEXTCOLOR_GREY;
ImGui::SameLine();
ImGui::TextColored(touchpadColor, "Touchpad down");
}
}
ConfigureButtonLayout(layout);
mControllerPanelBaseY = ImGui::GetCursorPosY();
ControllerUIPanelParams panelParams{mControllerPanelBaseX, mControllerPanelBaseY,
mControllerPanelScale};
// Buttons
for (uint32_t index = UIBUTTON_A; index < UIBUTTON_COUNT; ++index) {
const ControllerUIButtons buttonId = static_cast<const ControllerUIButtons>(index);
ControllerButtonInfo buttonInfo = ControllerUIData::getControllerButtonInfo(buttonId);
buttonInfo.buttonState = (controllerData.buttonsDown & buttonInfo.buttonMask)
? UIBUTTON_STATE_ACTIVE
: UIBUTTON_STATE_IDLE;
if (buttonInfo.enabled) {
ControllerUIUtil::Button(panelParams, buttonId, buttonInfo);
}
}
// Thumbsticks
const float stickFlatLX = fmax(FLT_MIN, controllerInfo.leftStickPrecision.stickFlatX);
const float stickFlatLY = fmax(FLT_MIN, controllerInfo.leftStickPrecision.stickFlatY);
const float stickFlatRX = fmax(FLT_MIN, controllerInfo.rightStickPrecision.stickFlatX);
const float stickFlatRY = fmax(FLT_MIN, controllerInfo.rightStickPrecision.stickFlatY);
ControllerUIStickStates leftStickState = UISTICK_STATE_IDLE;
ControllerUIStickStates rightStickState = UISTICK_STATE_IDLE;
if (controllerData.buttonsDown & PADDLEBOAT_BUTTON_L3) {
leftStickState = UISTICK_STATE_DEPRESSED;
} else if (fabsf(controllerData.leftStick.stickX) > stickFlatLX ||
fabsf(controllerData.leftStick.stickY) > stickFlatLY) {
leftStickState = UISTICK_STATE_ACTIVE;
}
if (controllerData.buttonsDown & PADDLEBOAT_BUTTON_R3) {
rightStickState = UISTICK_STATE_DEPRESSED;
} else if (fabsf(controllerData.rightStick.stickX) > stickFlatRX ||
fabsf(controllerData.rightStick.stickY) > stickFlatRY) {
rightStickState = UISTICK_STATE_ACTIVE;
}
float leftX = controllerData.leftStick.stickX;
float leftY = controllerData.leftStick.stickY;
float rightX = controllerData.rightStick.stickX;
float rightY = controllerData.rightStick.stickY;
// Unless overridden, set the stick X/Y to 0.0 if it's in the
// center deadzone
if (mDontTrimDeadzone == false && leftStickState == UISTICK_STATE_IDLE) {
leftX = 0.0f;
leftY = 0.0f;
}
if (mDontTrimDeadzone == false && rightStickState == UISTICK_STATE_IDLE) {
rightX = 0.0f;
rightY = 0.0f;
}
const float stickScale = ControllerUIData::getStickScale();
ImVec2 leftStickValues(leftX * stickScale,
leftY * stickScale);
ImVec2 rightStickValues(rightX * stickScale,
rightY * stickScale);
ControllerUIUtil::Thumbstick(panelParams, ControllerUIData::getStickPosition(true),
leftStickValues, leftStickState);
ControllerUIUtil::Thumbstick(panelParams, ControllerUIData::getStickPosition(false),
rightStickValues, rightStickState);
// Trigger fill bars
const float windowStartY = NativeEngine::GetInstance()->GetSystemBarOffset();
ImDrawList *draw_list = ImGui::GetWindowDrawList();
ControllerUIUtil::TriggerBar(panelParams, draw_list, UIBUTTON_L1, controllerData.triggerL1,
windowStartY);
ControllerUIUtil::TriggerBar(panelParams, draw_list, UIBUTTON_L2, controllerData.triggerL2,
windowStartY);
ControllerUIUtil::TriggerBar(panelParams, draw_list, UIBUTTON_R1, controllerData.triggerR1,
windowStartY);
ControllerUIUtil::TriggerBar(panelParams, draw_list, UIBUTTON_R2, controllerData.triggerR2,
windowStartY);
}