Implement analog control detection. Invert Y axis for right analog stick because steam wants it to be inverted by default? Release Build 8293.

pull/57/head
sigonasr2 8 months ago
parent 3be02315a5
commit 02ef18826d
  1. 72
      Adventures in Lestoria/Key.cpp
  2. 8
      Adventures in Lestoria/Key.h
  3. 2
      Adventures in Lestoria/Version.h
  4. BIN
      x64/Release/Adventures in Lestoria.exe

@ -56,6 +56,9 @@ std::array<InputHandle_t,16>Input::steamControllers;
uint8_t Input::activeSteamControllerIndex; uint8_t Input::activeSteamControllerIndex;
uint8_t Input::controllerCount{0}; uint8_t Input::controllerCount{0};
std::vector<Steam::SteamInput>Input::leftStickActionSets{Steam::MOVE};
std::vector<Steam::SteamInput>Input::rightStickActionSets{Steam::MANUAL_AIM,Steam::SCROLL};
std::array<std::unordered_map<Steam::SteamInput,std::pair<std::string,HWButton>>,16>Input::enumToActionName; std::array<std::unordered_map<Steam::SteamInput,std::pair<std::string,HWButton>>,16>Input::enumToActionName;
std::unordered_map<EInputActionOrigin,std::string>Input::steamIconToGameIcon{ std::unordered_map<EInputActionOrigin,std::string>Input::steamIconToGameIcon{
{k_EInputActionOrigin_SteamController_A,"themes/button_d_xb.png"}, {k_EInputActionOrigin_SteamController_A,"themes/button_d_xb.png"},
@ -154,7 +157,6 @@ void Input::Initialize(){
enumToActionName[i][Steam::ITEM_1]={"Item_1",{}}; enumToActionName[i][Steam::ITEM_1]={"Item_1",{}};
enumToActionName[i][Steam::ITEM_2]={"Item_2",{}}; enumToActionName[i][Steam::ITEM_2]={"Item_2",{}};
enumToActionName[i][Steam::ITEM_3]={"Item_3",{}}; enumToActionName[i][Steam::ITEM_3]={"Item_3",{}};
enumToActionName[i][Steam::NAVIGATE]={"Navigate",{}};
enumToActionName[i][Steam::SCROLL]={"Scroll",{}}; enumToActionName[i][Steam::SCROLL]={"Scroll",{}};
enumToActionName[i][Steam::CONFIRM]={"Confirm",{}}; enumToActionName[i][Steam::CONFIRM]={"Confirm",{}};
enumToActionName[i][Steam::BACK]={"Back",{}}; enumToActionName[i][Steam::BACK]={"Back",{}};
@ -328,32 +330,68 @@ float Input::Analog(){
} }
} }
}else{ }else{
auto GetAnalogStickVal=[&](uint8_t controller,Steam::SteamInput input,Axis axis){
InputAnalogActionHandle_t inputHnd=SteamInput()->GetAnalogActionHandle(enumToActionName[controller][input].first.c_str());
InputAnalogActionData_t data=SteamInput()->GetAnalogActionData(steamControllers[controller],inputHnd);
if(data.bActive){
switch(axis){
case Axis::X:{
return data.x;
}break;
case Axis::Y:{
return -data.y; //Invert the Y axis since Steam makes the right stick be a "camera look around" stick by default with inverted controls.
}break;
default:{
ERR(std::format("WARNING! Invalid axis type given: {}! THIS SHOULD NOT BE HAPPENING!",int(axis)));
}
}
}
return 0.f;
};
for(int i=0;i<controllerCount;i++){ for(int i=0;i<controllerCount;i++){
switch(static_cast<GPAxes>(key)){ switch(static_cast<GPAxes>(key)){
case GPAxes::LX:{ case GPAxes::LX:{
InputDigitalActionHandle_t inputHnd=SteamInput()->GetDigitalActionHandle(""); for(Steam::SteamInput input:leftStickActionSets){
float axisVal=GetAnalogStickVal(i,input,Axis::X);
if(axisVal!=0.f){
usingGamepad=true;
return axisVal;
}
}
}break; }break;
case GPAxes::LY:{ case GPAxes::LY:{
for(Steam::SteamInput input:leftStickActionSets){
float axisVal=GetAnalogStickVal(i,input,Axis::Y);
if(axisVal!=0.f){
usingGamepad=true;
return axisVal;
}
}
}break; }break;
case GPAxes::RX:{ case GPAxes::RX:{
for(Steam::SteamInput input:rightStickActionSets){
float axisVal=GetAnalogStickVal(i,input,Axis::X);
if(axisVal!=0.f){
usingGamepad=true;
return axisVal;
}
}
}break; }break;
case GPAxes::RY:{ case GPAxes::RY:{
for(Steam::SteamInput input:rightStickActionSets){
}break; float axisVal=GetAnalogStickVal(i,input,Axis::Y);
case GPAxes::TL:{ if(axisVal!=0.f){
usingGamepad=true;
}break; return axisVal;
case GPAxes::TR:{ }
}
}break;
case GPAxes::DX:{
}break;
case GPAxes::DY:{
}break; }break;
case GPAxes::TL:{}break;//Unused. No-op
case GPAxes::TR:{}break;//Unused. No-op
case GPAxes::DX:{}break;//Unused. No-op
case GPAxes::DY:{}break;//Unused. No-op
} }
} }
} }

@ -59,6 +59,11 @@ enum InputType{
ANALOG, ANALOG,
}; };
enum class Axis{
X,
Y,
};
namespace Steam{ namespace Steam{
enum SteamInput{ enum SteamInput{
//Gameplay Inputs //Gameplay Inputs
@ -75,7 +80,6 @@ namespace Steam{
ITEM_2, ITEM_2,
ITEM_3, ITEM_3,
//Menu Inputs //Menu Inputs
NAVIGATE, //This is the left stick analog input. Whenever we use this, we assume left stick is being used.
SCROLL, //This is the right stick analog input. Whenever we use this, we assume right stick is being used. SCROLL, //This is the right stick analog input. Whenever we use this, we assume right stick is being used.
CONFIRM, CONFIRM,
BACK, BACK,
@ -109,6 +113,8 @@ class Input{
static std::array<InputHandle_t,16>steamControllers; static std::array<InputHandle_t,16>steamControllers;
static uint8_t activeSteamControllerIndex; static uint8_t activeSteamControllerIndex;
static uint8_t controllerCount; static uint8_t controllerCount;
static std::vector<Steam::SteamInput>leftStickActionSets;
static std::vector<Steam::SteamInput>rightStickActionSets;
static void LoadSteamButtonIcons(); static void LoadSteamButtonIcons();
public: public:
Input(InputType type,int key); Input(InputType type,int key);

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 0 #define VERSION_MAJOR 0
#define VERSION_MINOR 5 #define VERSION_MINOR 5
#define VERSION_PATCH 1 #define VERSION_PATCH 1
#define VERSION_BUILD 8290 #define VERSION_BUILD 8293
#define stringify(a) stringify_(a) #define stringify(a) stringify_(a)
#define stringify_(a) #a #define stringify_(a) #a

Loading…
Cancel
Save