October3d55/M/PICOOpenXR/Source/PICOOpenXRInput/Private/PICO_Controller.cpp

469 lines
34 KiB
C++

// Copyright 2023 PICO Inc. All Rights Reserved.
#include "PICO_Controller.h"
#include "OpenXRCore.h"
#include "PICO_InputModule.h"
#include "IOpenXRHMDModule.h"
#include "Haptics/HapticFeedbackEffect_Base.h"
#include "Framework/Application/SlateApplication.h"
#include "Haptics/HapticFeedbackEffect_SoundWave.h"
#include "Misc/Paths.h"
#include "Misc/FileHelper.h"
#if PLATFORM_ANDROID
#include <iostream>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#endif
#define LOCTEXT_NAMESPACE "FControllerPICO"
// Left
const FKey PICOG3_Left_Menu_Click("PICOG3_Left_Menu_Click");
const FKey PICOG3_Left_Trigger("PICOG3_Left_Trigger_Click");
const FKey PICOG3_Left_Trigger_Axis("PICOG3_Left_Trigger_Axis");
const FKey PICOG3_Left_Thumbstick_2D("PICOG3_Left_Thumbstick_2D");
const FKey PICOG3_Left_Thumbstick_X("PICOG3_Left_Thumbstick_X");
const FKey PICOG3_Left_Thumbstick_Y("PICOG3_Left_Thumbstick_Y");
const FKey PICOG3_Left_Thumbstick("PICOG3_Left_Thumbstick_Click");
//Right
const FKey PICOG3_Right_Menu_Click("PICOG3_Right_Menu_Click");
const FKey PICOG3_Right_Trigger("PICOG3_Right_Trigger_Click");
const FKey PICOG3_Right_Trigger_Axis("PICOG3_Right_Trigger_Axis");
const FKey PICOG3_Right_Thumbstick_2D("PICOG3_Right_Thumbstick_2D");
const FKey PICOG3_Right_Thumbstick_X("PICOG3_Right_Thumbstick_X");
const FKey PICOG3_Right_Thumbstick_Y("PICOG3_Right_Thumbstick_Y");
const FKey PICOG3_Right_Thumbstick("PICOG3_Right_Thumbstick_Click");
// Left
const FKey PICONeo3_Left_X_Click("PICONeo3_Left_X_Click");
const FKey PICONeo3_Left_Y_Click("PICONeo3_Left_Y_Click");
const FKey PICONeo3_Left_X_Touch("PICONeo3_Left_X_Touch");
const FKey PICONeo3_Left_Y_Touch("PICONeo3_Left_Y_Touch");
const FKey PICONeo3_Left_Menu_Click("PICONeo3_Left_Menu_Click");
const FKey PICONeo3_Left_Grip("PICONeo3_Left_Grip_Click");
const FKey PICONeo3_Left_Grip_Axis("PICONeo3_Left_Grip_Axis");
const FKey PICONeo3_Left_Trigger("PICONeo3_Left_Trigger_Click");
const FKey PICONeo3_Left_Trigger_Axis("PICONeo3_Left_Trigger_Axis");
const FKey PICONeo3_Left_Trigger_Touch("PICONeo3_Left_Trigger_Touch");
const FKey PICONeo3_Left_Thumbstick_2D("PICONeo3_Left_Thumbstick_2D");
const FKey PICONeo3_Left_Thumbstick_X("PICONeo3_Left_Thumbstick_X");
const FKey PICONeo3_Left_Thumbstick_Y("PICONeo3_Left_Thumbstick_Y");
const FKey PICONeo3_Left_Thumbstick("PICONeo3_Left_Thumbstick_Click");
const FKey PICONeo3_Left_Thumbstick_Touch("PICONeo3_Left_Thumbstick_Touch");
//Right
const FKey PICONeo3_Right_A_Click("PICONeo3_Right_A_Click");
const FKey PICONeo3_Right_B_Click("PICONeo3_Right_B_Click");
const FKey PICONeo3_Right_A_Touch("PICONeo3_Right_A_Touch");
const FKey PICONeo3_Right_B_Touch("PICONeo3_Right_B_Touch");
const FKey PICONeo3_Right_Menu_Click("PICONeo3_Right_Menu_Click");
const FKey PICONeo3_Right_Grip("PICONeo3_Right_Grip_Click");
const FKey PICONeo3_Right_Grip_Axis("PICONeo3_Right_Grip_Axis");
const FKey PICONeo3_Right_Trigger("PICONeo3_Right_Trigger_Click");
const FKey PICONeo3_Right_Trigger_Axis("PICONeo3_Right_Trigger_Axis");
const FKey PICONeo3_Right_Trigger_Touch("PICONeo3_Right_Trigger_Touch");
const FKey PICONeo3_Right_Thumbstick_2D("PICONeo3_Right_Thumbstick_2D");
const FKey PICONeo3_Right_Thumbstick_X("PICONeo3_Right_Thumbstick_X");
const FKey PICONeo3_Right_Thumbstick_Y("PICONeo3_Right_Thumbstick_Y");
const FKey PICONeo3_Right_Thumbstick("PICONeo3_Right_Thumbstick_Click");
const FKey PICONeo3_Right_Thumbstick_Touch("PICONeo3_Right_Thumbstick_Touch");
// Left
const FKey PICO4_Left_X_Click("PICO4_Left_X_Click");
const FKey PICO4_Left_Y_Click("PICO4_Left_Y_Click");
const FKey PICO4_Left_X_Touch("PICO4_Left_X_Touch");
const FKey PICO4_Left_Y_Touch("PICO4_Left_Y_Touch");
const FKey PICO4_Left_Menu_Click("PICO4_Left_Menu_Click");
const FKey PICO4_Left_Grip("PICO4_Left_Grip_Click");
const FKey PICO4_Left_Grip_Axis("PICO4_Left_Grip_Axis");
const FKey PICO4_Left_Trigger("PICO4_Left_Trigger_Click");
const FKey PICO4_Left_Trigger_Axis("PICO4_Left_Trigger_Axis");
const FKey PICO4_Left_Trigger_Touch("PICO4_Left_Trigger_Touch");
const FKey PICO4_Left_Thumbstick_2D("PICO4_Left_Thumbstick_2D");
const FKey PICO4_Left_Thumbstick_X("PICO4_Left_Thumbstick_X");
const FKey PICO4_Left_Thumbstick_Y("PICO4_Left_Thumbstick_Y");
const FKey PICO4_Left_Thumbstick("PICO4_Left_Thumbstick_Click");
const FKey PICO4_Left_Thumbstick_Touch("PICO4_Left_Thumbstick_Touch");
//Right
const FKey PICO4_Right_A_Click("PICO4_Right_A_Click");
const FKey PICO4_Right_B_Click("PICO4_Right_B_Click");
const FKey PICO4_Right_A_Touch("PICO4_Right_A_Touch");
const FKey PICO4_Right_B_Touch("PICO4_Right_B_Touch");
const FKey PICO4_Right_Grip("PICO4_Right_Grip_Click");
const FKey PICO4_Right_Grip_Axis("PICO4_Right_Grip_Axis");
const FKey PICO4_Right_Trigger("PICO4_Right_Trigger_Click");
const FKey PICO4_Right_Trigger_Axis("PICO4_Right_Trigger_Axis");
const FKey PICO4_Right_Trigger_Touch("PICO4_Right_Trigger_Touch");
const FKey PICO4_Right_Thumbstick_2D("PICO4_Right_Thumbstick_2D");
const FKey PICO4_Right_Thumbstick_X("PICO4_Right_Thumbstick_X");
const FKey PICO4_Right_Thumbstick_Y("PICO4_Right_Thumbstick_Y");
const FKey PICO4_Right_Thumbstick("PICO4_Right_Thumbstick_Click");
const FKey PICO4_Right_Thumbstick_Touch("PICO4_Right_Thumbstick_Touch");
// Left
const FKey PICO4U_Left_X_Click("PICO4U_Left_X_Click");
const FKey PICO4U_Left_Y_Click("PICO4U_Left_Y_Click");
const FKey PICO4U_Left_X_Touch("PICO4U_Left_X_Touch");
const FKey PICO4U_Left_Y_Touch("PICO4U_Left_Y_Touch");
const FKey PICO4U_Left_Menu_Click("PICO4U_Left_Menu_Click");
const FKey PICO4U_Left_Grip("PICO4U_Left_Grip_Click");
const FKey PICO4U_Left_Grip_Axis("PICO4U_Left_Grip_Axis");
const FKey PICO4U_Left_Trigger("PICO4U_Left_Trigger_Click");
const FKey PICO4U_Left_Trigger_Axis("PICO4U_Left_Trigger_Axis");
const FKey PICO4U_Left_Trigger_Touch("PICO4U_Left_Trigger_Touch");
const FKey PICO4U_Left_Thumbstick_2D("PICO4U_Left_Thumbstick_2D");
const FKey PICO4U_Left_Thumbstick_X("PICO4U_Left_Thumbstick_X");
const FKey PICO4U_Left_Thumbstick_Y("PICO4U_Left_Thumbstick_Y");
const FKey PICO4U_Left_Thumbstick("PICO4U_Left_Thumbstick_Click");
const FKey PICO4U_Left_Thumbstick_Touch("PICO4U_Left_Thumbstick_Touch");
const FKey PICO4U_Left_ThumbRest_Touch("PICO4U_Left_ThumbRest_Touch");
//Right
const FKey PICO4U_Right_A_Click("PICO4U_Right_A_Click");
const FKey PICO4U_Right_B_Click("PICO4U_Right_B_Click");
const FKey PICO4U_Right_A_Touch("PICO4U_Right_A_Touch");
const FKey PICO4U_Right_B_Touch("PICO4U_Right_B_Touch");
const FKey PICO4U_Right_Grip("PICO4U_Right_Grip_Click");
const FKey PICO4U_Right_Grip_Axis("PICO4U_Right_Grip_Axis");
const FKey PICO4U_Right_Trigger("PICO4U_Right_Trigger_Click");
const FKey PICO4U_Right_Trigger_Axis("PICO4U_Right_Trigger_Axis");
const FKey PICO4U_Right_Trigger_Touch("PICO4U_Right_Trigger_Touch");
const FKey PICO4U_Right_Thumbstick_2D("PICO4U_Right_Thumbstick_2D");
const FKey PICO4U_Right_Thumbstick_X("PICO4U_Right_Thumbstick_X");
const FKey PICO4U_Right_Thumbstick_Y("PICO4U_Right_Thumbstick_Y");
const FKey PICO4U_Right_Thumbstick("PICO4U_Right_Thumbstick_Click");
const FKey PICO4U_Right_Thumbstick_Touch("PICO4U_Right_Thumbstick_Touch");
const FKey PICO4U_Right_ThumbRest_Touch("PICO4U_Right_ThumbRest_Touch");
FControllerPICO::FControllerPICO()
:SuggestedBindings(false)
{
}
void FControllerPICO::Register()
{
RegisterOpenXRExtensionModularFeature();
EKeys::AddMenuCategoryDisplayInfo("PICOG3", LOCTEXT("PICOG3SubCategory", "PICO G3 Controller"), TEXT("GraphEditor.PadEvent_16x"));
// Left
EKeys::AddKey(FKeyDetails(PICOG3_Left_Menu_Click, LOCTEXT("PICOG3_Left_Menu_Click", "PICO G3 (L) Menu"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Left_Trigger, LOCTEXT("PICOG3_Left_Trigger_Click", "PICO G3 (L) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Left_Trigger_Axis, LOCTEXT("PICOG3_Left_Trigger_Axis", "PICO G3 (L) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Left_Thumbstick_X, LOCTEXT("PICOG3_Left_Thumbstick_X", "PICO G3 (L) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Left_Thumbstick_Y, LOCTEXT("PICOG3_Left_Thumbstick_Y", "PICO G3 (L) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddPairedKey(FKeyDetails(PICOG3_Left_Thumbstick_2D, LOCTEXT("PICOG3_Left_Thumbstick_2D", "PICO G3 (L) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"), PICOG3_Left_Thumbstick_X, PICOG3_Left_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICOG3_Left_Thumbstick, LOCTEXT("PICOG3_Left_Thumbstick_Click", "PICO G3 (L) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
// Right
EKeys::AddKey(FKeyDetails(PICOG3_Right_Menu_Click, LOCTEXT("PICOG3_Right_Menu_Click", "PICO G3 (R) Menu"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Right_Trigger, LOCTEXT("PICOG3_Right_Trigger_Click", "PICO G3 (R) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Right_Trigger_Axis, LOCTEXT("PICOG3_Right_Trigger_Axis", "PICO G3 (R) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Right_Thumbstick_X, LOCTEXT("PICOG3_Right_Thumbstick_X", "PICO G3 (R) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddKey(FKeyDetails(PICOG3_Right_Thumbstick_Y, LOCTEXT("PICOG3_Right_Thumbstick_Y", "PICO G3 (R) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddPairedKey(FKeyDetails(PICOG3_Right_Thumbstick_2D, LOCTEXT("PICOG3_Right_Thumbstick_2D", "PICO G3 (R) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICOG3"), PICOG3_Right_Thumbstick_X, PICOG3_Right_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICOG3_Right_Thumbstick, LOCTEXT("PICOG3_Right_Thumbstick_Click", "PICO G3 (R) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICOG3"));
EKeys::AddMenuCategoryDisplayInfo("PICONeo3", LOCTEXT("PICONeo3SubCategory", "PICO Neo3 Controller"), TEXT("GraphEditor.PadEvent_16x"));
// Left
EKeys::AddKey(FKeyDetails(PICONeo3_Left_X_Click, LOCTEXT("PICONeo3_Left_X_Click", "PICO Neo3 (L) X Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Y_Click, LOCTEXT("PICONeo3_Left_Y_Click", "PICO Neo3 (L) Y Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_X_Touch, LOCTEXT("PICONeo3_Left_X_Touch", "PICO Neo3 (L) X Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Y_Touch, LOCTEXT("PICONeo3_Left_Y_Touch", "PICO Neo3 (L) Y Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Menu_Click, LOCTEXT("PICONeo3_Left_Menu_Click", "PICO Neo3 (L) Menu"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Grip, LOCTEXT("PICONeo3_Left_Grip_Click", "PICO Neo3 (L) Grip"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Grip_Axis, LOCTEXT("PICONeo3_Left_Grip_Axis", "PICO Neo3 (L) Grip Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Trigger, LOCTEXT("PICONeo3_Left_Trigger_Click", "PICO Neo3 (L) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Trigger_Axis, LOCTEXT("PICONeo3_Left_Trigger_Axis", "PICO Neo3 (L) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Trigger_Touch, LOCTEXT("PICONeo3_Left_Trigger_Touch", "PICO Neo3 (L) Trigger Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Thumbstick_X, LOCTEXT("PICONeo3_Left_Thumbstick_X", "PICO Neo3 (L) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Thumbstick_Y, LOCTEXT("PICONeo3_Left_Thumbstick_Y", "PICO Neo3 (L) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddPairedKey(FKeyDetails(PICONeo3_Left_Thumbstick_2D, LOCTEXT("PICONeo3_Left_Thumbstick_2D", "PICO Neo3 (L) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"), PICONeo3_Left_Thumbstick_X, PICONeo3_Left_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Thumbstick, LOCTEXT("PICONeo3_Left_Thumbstick_Click", "PICO Neo3 (L) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Left_Thumbstick_Touch, LOCTEXT("PICONeo3_Left_Thumbstick_Touch", "PICO Neo3 (L) Thumbstick Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
// Right
EKeys::AddKey(FKeyDetails(PICONeo3_Right_A_Click, LOCTEXT("PICONeo3_Right_A_Click", "PICO Neo3 (R) A Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_B_Click, LOCTEXT("PICONeo3_Right_B_Click", "PICO Neo3 (R) B Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_A_Touch, LOCTEXT("PICONeo3_Right_A_Touch", "PICO Neo3 (R) A Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_B_Touch, LOCTEXT("PICONeo3_Right_B_Touch", "PICO Neo3 (R) B Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Menu_Click, LOCTEXT("PICONeo3_Right_Menu_Click", "PICO Neo3 (R) Menu"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Grip, LOCTEXT("PICONeo3_Right_Grip_Click", "PICO Neo3 (R) Grip"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Grip_Axis, LOCTEXT("PICONeo3_Right_Grip_Axis", "PICO Neo3 (R) Grip Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Trigger, LOCTEXT("PICONeo3_Right_Trigger_Click", "PICO Neo3 (R) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Trigger_Axis, LOCTEXT("PICONeo3_Right_Trigger_Axis", "PICO Neo3 (R) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Trigger_Touch, LOCTEXT("PICONeo3_Right_Trigger_Touch", "PICO Neo3 (R) Trigger Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Thumbstick_X, LOCTEXT("PICONeo3_Right_Thumbstick_X", "PICO Neo3 (R) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Thumbstick_Y, LOCTEXT("PICONeo3_Right_Thumbstick_Y", "PICO Neo3 (R) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddPairedKey(FKeyDetails(PICONeo3_Right_Thumbstick_2D, LOCTEXT("PICONeo3_Right_Thumbstick_2D", "PICO Neo3 (R) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"), PICONeo3_Right_Thumbstick_X, PICONeo3_Right_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Thumbstick, LOCTEXT("PICONeo3_Right_Thumbstick_Click", "PICO Neo3 (R) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddKey(FKeyDetails(PICONeo3_Right_Thumbstick_Touch, LOCTEXT("PICONeo3_Right_Thumbstick_Touch", "PICO Neo3 (R) Thumbstick Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICONeo3"));
EKeys::AddMenuCategoryDisplayInfo("PICO4", LOCTEXT("PICO4SubCategory", "PICO 4 Controller"), TEXT("GraphEditor.PadEvent_16x"));
// Left
EKeys::AddKey(FKeyDetails(PICO4_Left_X_Click, LOCTEXT("PICO4_Left_X_Click", "PICO 4 (L) X Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Y_Click, LOCTEXT("PICO4_Left_Y_Click", "PICO 4 (L) Y Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_X_Touch, LOCTEXT("PICO4_Left_X_Touch", "PICO 4 (L) X Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Y_Touch, LOCTEXT("PICO4_Left_Y_Touch", "PICO 4 (L) Y Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Menu_Click, LOCTEXT("PICO4_Left_Menu_Click", "PICO 4 (L) Menu"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Grip, LOCTEXT("PICO4_Left_Grip_Click", "PICO 4 (L) Grip"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Grip_Axis, LOCTEXT("PICO4_Left_Grip_Axis", "PICO 4 (L) Grip Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Trigger, LOCTEXT("PICO4_Left_Trigger_Click", "PICO 4 (L) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Trigger_Axis, LOCTEXT("PICO4_Left_Trigger_Axis", "PICO 4 (L) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Trigger_Touch, LOCTEXT("PICO4_Left_Trigger_Touch", "PICO 4 (L) Trigger Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Thumbstick_X, LOCTEXT("PICO4_Left_Thumbstick_X", "PICO 4 (L) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Thumbstick_Y, LOCTEXT("PICO4_Left_Thumbstick_Y", "PICO 4 (L) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddPairedKey(FKeyDetails(PICO4_Left_Thumbstick_2D, LOCTEXT("PICO4_Left_Thumbstick_2D", "PICO 4 (L) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICO4"), PICO4_Left_Thumbstick_X, PICO4_Left_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICO4_Left_Thumbstick, LOCTEXT("PICO4_Left_Thumbstick_Click", "PICO 4 (L) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Left_Thumbstick_Touch, LOCTEXT("PICO4_Left_Thumbstick_Touch", "PICO 4 (L) Thumbstick Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
// Right
EKeys::AddKey(FKeyDetails(PICO4_Right_A_Click, LOCTEXT("PICO4_Right_A_Click", "PICO 4 (R) A Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_B_Click, LOCTEXT("PICO4_Right_B_Click", "PICO 4 (R) B Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_A_Touch, LOCTEXT("PICO4_Right_A_Touch", "PICO 4 (R) A Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_B_Touch, LOCTEXT("PICO4_Right_B_Touch", "PICO 4 (R) B Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Grip, LOCTEXT("PICO4_Right_Grip_Click", "PICO 4 (R) Grip"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Grip_Axis, LOCTEXT("PICO4_Right_Grip_Axis", "PICO 4 (R) Grip Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Trigger, LOCTEXT("PICO4_Right_Trigger_Click", "PICO 4 (R) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Trigger_Axis, LOCTEXT("PICO4_Right_Trigger_Axis", "PICO 4 (R) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Trigger_Touch, LOCTEXT("PICO4_Right_Trigger_Touch", "PICO 4 (R) Trigger Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Thumbstick_X, LOCTEXT("PICO4_Right_Thumbstick_X", "PICO 4 (R) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Thumbstick_Y, LOCTEXT("PICO4_Right_Thumbstick_Y", "PICO 4 (R) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddPairedKey(FKeyDetails(PICO4_Right_Thumbstick_2D, LOCTEXT("PICO4_Right_Thumbstick_2D", "PICO 4 (R) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICO4"), PICO4_Right_Thumbstick_X, PICO4_Right_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICO4_Right_Thumbstick, LOCTEXT("PICO4_Right_Thumbstick_Click", "PICO 4 (R) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddKey(FKeyDetails(PICO4_Right_Thumbstick_Touch, LOCTEXT("PICO4_Right_Thumbstick_Touch", "PICO 4 (R) Thumbstick Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4"));
EKeys::AddMenuCategoryDisplayInfo("PICO4U", LOCTEXT("PICO4USubCategory", "PICO 4U Controller"), TEXT("GraphEditor.PadEvent_16x"));
// Left
EKeys::AddKey(FKeyDetails(PICO4U_Left_X_Click, LOCTEXT("PICO4U_Left_X_Click", "PICO 4U (L) X Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Y_Click, LOCTEXT("PICO4U_Left_Y_Click", "PICO 4U (L) Y Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_X_Touch, LOCTEXT("PICO4U_Left_X_Touch", "PICO 4U (L) X Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Y_Touch, LOCTEXT("PICO4U_Left_Y_Touch", "PICO 4U (L) Y Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Menu_Click, LOCTEXT("PICO4U_Left_Menu_Click", "PICO 4U (L) Menu"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Grip, LOCTEXT("PICO4U_Left_Grip_Click", "PICO 4U (L) Grip"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Grip_Axis, LOCTEXT("PICO4U_Left_Grip_Axis", "PICO 4U (L) Grip Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Trigger, LOCTEXT("PICO4U_Left_Trigger_Click", "PICO 4U (L) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Trigger_Axis, LOCTEXT("PICO4U_Left_Trigger_Axis", "PICO 4U (L) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Trigger_Touch, LOCTEXT("PICO4U_Left_Trigger_Touch", "PICO 4U (L) Trigger Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Thumbstick_X, LOCTEXT("PICO4U_Left_Thumbstick_X", "PICO 4U (L) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Thumbstick_Y, LOCTEXT("PICO4U_Left_Thumbstick_Y", "PICO 4U (L) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddPairedKey(FKeyDetails(PICO4U_Left_Thumbstick_2D, LOCTEXT("PICO4U_Left_Thumbstick_2D", "PICO 4U (L) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"), PICO4U_Left_Thumbstick_X, PICO4U_Left_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICO4U_Left_Thumbstick, LOCTEXT("PICO4U_Left_Thumbstick_Click", "PICO 4U (L) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_Thumbstick_Touch, LOCTEXT("PICO4U_Left_Thumbstick_Touch", "PICO 4U (L) Thumbstick Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Left_ThumbRest_Touch, LOCTEXT("PICO4U_Left_ThumbRest_Touch", "PICO 4U (L) ThumbRest Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
// Right
EKeys::AddKey(FKeyDetails(PICO4U_Right_A_Click, LOCTEXT("PICO4U_Right_A_Click", "PICO 4U (R) A Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_B_Click, LOCTEXT("PICO4U_Right_B_Click", "PICO 4U (R) B Press"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_A_Touch, LOCTEXT("PICO4U_Right_A_Touch", "PICO 4U (R) A Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_B_Touch, LOCTEXT("PICO4U_Right_B_Touch", "PICO 4U (R) B Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Grip, LOCTEXT("PICO4U_Right_Grip_Click", "PICO 4U (R) Grip"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Grip_Axis, LOCTEXT("PICO4U_Right_Grip_Axis", "PICO 4U (R) Grip Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Trigger, LOCTEXT("PICO4U_Right_Trigger_Click", "PICO 4U (R) Trigger"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Trigger_Axis, LOCTEXT("PICO4U_Right_Trigger_Axis", "PICO 4U (R) Trigger Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Trigger_Touch, LOCTEXT("PICO4U_Right_Trigger_Touch", "PICO 4U (R) Trigger Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Thumbstick_X, LOCTEXT("PICO4U_Right_Thumbstick_X", "PICO 4U (R) Thumbstick X"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Thumbstick_Y, LOCTEXT("PICO4U_Right_Thumbstick_Y", "PICO 4U (R) Thumbstick Y"), FKeyDetails::GamepadKey | FKeyDetails::Axis1D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddPairedKey(FKeyDetails(PICO4U_Right_Thumbstick_2D, LOCTEXT("PICO4U_Right_Thumbstick_2D", "PICO 4U (R) Thumbstick 2D-Axis"), FKeyDetails::GamepadKey | FKeyDetails::Axis2D | FKeyDetails::NotBlueprintBindableKey, "PICO4U"), PICO4U_Right_Thumbstick_X, PICO4U_Right_Thumbstick_Y);
EKeys::AddKey(FKeyDetails(PICO4U_Right_Thumbstick, LOCTEXT("PICO4U_Right_Thumbstick_Click", "PICO 4U (R) Thumbstick"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_Thumbstick_Touch, LOCTEXT("PICO4U_Right_Thumbstick_Touch", "PICO 4U (R) Thumbstick Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
EKeys::AddKey(FKeyDetails(PICO4U_Right_ThumbRest_Touch, LOCTEXT("PICO4U_Right_ThumbRest_Touch", "PICO 4U (R) ThumbRest Touch"), FKeyDetails::GamepadKey | FKeyDetails::NotBlueprintBindableKey, "PICO4U"));
}
void FControllerPICO::Unregister()
{
UnregisterOpenXRExtensionModularFeature();
}
bool FControllerPICO::GetRequiredExtensions(TArray<const ANSICHAR*>& OutExtensions)
{
OutExtensions.Add("XR_BD_controller_interaction");
return true;
}
void FControllerPICO::PostCreateInstance(XrInstance InInstance)
{
Instance = InInstance;
XrPath PathLeft;
XrResult Result;
Result = xrStringToPath(Instance, "/user/hand/left", &PathLeft);
if (XR_SUCCEEDED(Result))
{
SubactionPaths.Add(PathLeft);
}
XrPath PathRight;
Result = xrStringToPath(Instance, "/user/hand/right", &PathRight);
if (XR_SUCCEEDED(Result))
{
SubactionPaths.Add(PathRight);
}
ActionStateFloats.SetNum(SubactionPaths.Num());
}
const void* FControllerPICO::OnCreateSession(XrInstance InInstance, XrSystemId InSystem, const void* InNext)
{
if (ControllerActionSet)
{
XR_ENSURE(xrDestroyActionSet(ControllerActionSet));
}
XrActionSetCreateInfo ActionSetInfo = { XR_TYPE_ACTION_SET_CREATE_INFO };
FCStringAnsi::Strcpy(ActionSetInfo.actionSetName, XR_MAX_ACTION_SET_NAME_SIZE, "openxrbatteryactionset");
FCStringAnsi::Strcpy(ActionSetInfo.localizedActionSetName, XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE, "OpenXR Battery Action Set");
XR_ENSURE(xrCreateActionSet(Instance, &ActionSetInfo, &ControllerActionSet));
XrActionCreateInfo ActionInfo = { XR_TYPE_ACTION_CREATE_INFO };
ActionInfo.countSubactionPaths = SubactionPaths.Num();
ActionInfo.subactionPaths = SubactionPaths.GetData();
FCStringAnsi::Strcpy(ActionInfo.actionName, XR_MAX_ACTION_NAME_SIZE, "openxrbatteryaction");
FCStringAnsi::Strcpy(ActionInfo.localizedActionName, XR_MAX_LOCALIZED_ACTION_NAME_SIZE, "OpenXR Battery Action");
ActionInfo.actionType = XR_ACTION_TYPE_FLOAT_INPUT;
XR_ENSURE(xrCreateAction(ControllerActionSet, &ActionInfo, &ControllerBatteryAction));
return InNext;
}
void FControllerPICO::PostCreateSession(XrSession InSession)
{
Session = InSession;
}
bool FControllerPICO::GetInteractionProfiles(XrInstance InInstance, TArray<FString>&OutKeyPrefixes, TArray<XrPath>&OutPaths, TArray<bool>&OutHasHaptics)
{
XrPath InteractionProfile;
XrResult Result = xrStringToPath(InInstance, "/interaction_profiles/bytedance/pico_g3_controller", &InteractionProfile);
if (XR_SUCCEEDED(Result))
{
OutKeyPrefixes.Add("PICOG3");
OutPaths.Add(InteractionProfile);
OutHasHaptics.Add(false);
AddProfile(InteractionProfile);
}
Result = xrStringToPath(InInstance, "/interaction_profiles/bytedance/pico_neo3_controller", &InteractionProfile);
if (XR_SUCCEEDED(Result))
{
OutKeyPrefixes.Add("PICONeo3");
OutPaths.Add(InteractionProfile);
OutHasHaptics.Add(true);
AddProfile(InteractionProfile);
}
Result = xrStringToPath(InInstance, "/interaction_profiles/bytedance/pico4_controller", &InteractionProfile);
if (XR_SUCCEEDED(Result))
{
OutKeyPrefixes.Add("PICO4");
OutPaths.Add(InteractionProfile);
OutHasHaptics.Add(true);
AddProfile(InteractionProfile);
}
Result = xrStringToPath(InInstance, "/interaction_profiles/bytedance/pico4s_controller", &InteractionProfile);
if (XR_SUCCEEDED(Result))
{
OutKeyPrefixes.Add("PICO4U");
OutPaths.Add(InteractionProfile);
OutHasHaptics.Add(true);
AddProfile(InteractionProfile);
}
return true;
}
bool FControllerPICO::GetSuggestedBindings(XrPath InInteractionProfile, TArray<XrActionSuggestedBinding>& OutBindings)
{
if (Instance != XR_NULL_HANDLE && ControllerBatteryAction != XR_NULL_HANDLE && Profiles.Find(InInteractionProfile) != INDEX_NONE)
{
XrPath BatteryLeft;
XrResult Result;
Result = xrStringToPath(Instance, "/user/hand/left/input/battery/value", &BatteryLeft);
if (XR_SUCCEEDED(Result))
{
OutBindings.Add(XrActionSuggestedBinding{ ControllerBatteryAction ,BatteryLeft });
}
XrPath BatteryRight;
Result = xrStringToPath(Instance, "/user/hand/right/input/battery/value", &BatteryRight);
if (XR_SUCCEEDED(Result))
{
OutBindings.Add(XrActionSuggestedBinding{ ControllerBatteryAction ,BatteryRight });
}
SuggestedBindings = true;
return true;
}
return false;
}
void FControllerPICO::AttachActionSets(TSet<XrActionSet>& OutActionSets)
{
if (SuggestedBindings)
{
check(ControllerActionSet != XR_NULL_HANDLE);
OutActionSets.Add(ControllerActionSet);
}
}
void FControllerPICO::GetActiveActionSetsForSync(TArray<XrActiveActionSet>& OutActiveSets)
{
if (SuggestedBindings)
{
check(ControllerActionSet != XR_NULL_HANDLE);
OutActiveSets.Add(XrActiveActionSet{ ControllerActionSet, SubactionPaths[0] });
OutActiveSets.Add(XrActiveActionSet{ ControllerActionSet, SubactionPaths[1] });
}
}
void FControllerPICO::PostSyncActions(XrSession InSession)
{
IInputInterface* InputInterface = nullptr;
if (FSlateApplication::IsInitialized())
{
InputInterface = FSlateApplication::Get().GetInputInterface();
}
int32 ControllerID = 0;
if (SuggestedBindings)
{
check(ControllerBatteryAction != XR_NULL_HANDLE);
for (int i = 0; i < SubactionPaths.Num(); i++)
{
XrActionStateGetInfo GetActionStateInfo{ XR_TYPE_ACTION_STATE_GET_INFO };
GetActionStateInfo.action = ControllerBatteryAction;
GetActionStateInfo.subactionPath = SubactionPaths[i];
ActionStateFloats[i] = { XR_TYPE_ACTION_STATE_FLOAT };
XR_ENSURE(xrGetActionStateFloat(InSession, &GetActionStateInfo, &ActionStateFloats[i]));
}
}
}
bool FControllerPICO::GetControllerBatteryLevel(const EControllerHand Hand, float& Level)
{
if (Hand == EControllerHand::Left)
{
Level = ActionStateFloats[0].currentState;
return ActionStateFloats[0].isActive == XR_TRUE;
}
else if (Hand == EControllerHand::Right)
{
Level = ActionStateFloats[1].currentState;
return ActionStateFloats[1].isActive == XR_TRUE;
}
return false;
}
void FControllerPICO::AddProfile(XrPath Profile)
{
Profiles.Add(Profile);
}
#undef LOCTEXT_NAMESPACE