forked from str1k3r/4JLibs-VS2012
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c24c663ef | ||
|
|
842fb91443 | ||
|
|
88a26c82a6 | ||
|
|
26a297f1de | ||
|
|
a9df365c5c | ||
|
|
fdef90f8e7 |
@@ -165,6 +165,23 @@ void C_4JInput::GetText(uint16_t *UTF16String)
|
||||
InternalKeyboard.GetText(UTF16String);
|
||||
}
|
||||
|
||||
const char* C_4JInput::PollControllerType(int ipad) {
|
||||
const char* GamepadType = InternalInputManager.GetGamepadType(ipad);
|
||||
|
||||
if (!GamepadType)
|
||||
return "UNKNOWN";
|
||||
|
||||
if (strcmp(GamepadType, "SWITCH_PRO") == 0 ||
|
||||
strcmp(GamepadType, "JOYCON_PAIR") == 0 ||
|
||||
strcmp(GamepadType, "JOYCON_L") == 0 ||
|
||||
strcmp(GamepadType, "JOYCON_R") == 0)
|
||||
{
|
||||
return "SWITCH";
|
||||
}
|
||||
|
||||
return GamepadType; // str1k3r - if not one of the switch types, return the type itself
|
||||
}
|
||||
|
||||
bool C_4JInput::VerifyStrings(WCHAR **pwStringA, int iStringC, int (*Func)(LPVOID, STRING_VERIFY_RESPONSE *), LPVOID lpParam)
|
||||
{
|
||||
return true;
|
||||
|
||||
@@ -317,6 +317,16 @@ unsigned int CInput::GetGameJoypadMaps(unsigned char ucMap, unsigned char ucActi
|
||||
return m_JoypadMap[ucMap][ucAction];
|
||||
}
|
||||
|
||||
const char* CInput::GetGamepadType(int iPad)
|
||||
{
|
||||
if (!m_Joypads[iPad].m_pGamepad)
|
||||
{
|
||||
return "UNKNOWN";
|
||||
}
|
||||
|
||||
return GamepadTypeName(SDL_GetGamepadType(m_Joypads[iPad].m_pGamepad));
|
||||
}
|
||||
|
||||
void CInput::SetJoypadMapVal(int iPad, unsigned char ucMap)
|
||||
{
|
||||
m_bJoypadMapArrayIsSetup = true;
|
||||
@@ -637,23 +647,72 @@ void CInput::HandleGamepadEvents()
|
||||
}
|
||||
break;
|
||||
case SDL_EVENT_GAMEPAD_REMOVED:
|
||||
for (int i = 0; i < MAX_JOYPADS; i++)
|
||||
{
|
||||
if (m_Joypads[i].m_pGamepad &&
|
||||
SDL_GetGamepadID(m_Joypads[i].m_pGamepad) == event.gdevice.which)
|
||||
{
|
||||
SDL_CloseGamepad(m_Joypads[i].m_pGamepad);
|
||||
m_Joypads[i].m_pGamepad = nullptr;
|
||||
m_Joypads[i].m_bIsConnected = false;
|
||||
{
|
||||
int removedIndex = -1;
|
||||
|
||||
break;
|
||||
for (int i = 0; i < MAX_JOYPADS; i++)
|
||||
{
|
||||
if (m_Joypads[i].m_pGamepad &&
|
||||
SDL_GetGamepadID(m_Joypads[i].m_pGamepad) == event.gdevice.which)
|
||||
{
|
||||
SDL_CloseGamepad(m_Joypads[i].m_pGamepad);
|
||||
m_Joypads[i].m_pGamepad = nullptr;
|
||||
m_Joypads[i].m_bIsConnected = false;
|
||||
removedIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (removedIndex == 0)
|
||||
{
|
||||
for (int i = 1; i < MAX_JOYPADS; i++)
|
||||
{
|
||||
if (m_Joypads[i].m_bIsConnected && m_Joypads[i].m_pGamepad)
|
||||
{
|
||||
ShiftGamepadData(0, i);
|
||||
SDL_SetGamepadPlayerIndex(m_Joypads[0].m_pGamepad, 0);
|
||||
ClearGamepadSlot(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CInput::ShiftGamepadData(int destIndex, int srcIndex)
|
||||
{
|
||||
m_Joypads[destIndex] = m_Joypads[srcIndex];
|
||||
|
||||
m_Joypads[destIndex].m_pfLeftThumbXAxisMap = &m_Joypads[destIndex].m_fNormalizedLeftThumbX;
|
||||
m_Joypads[destIndex].m_pfLeftThumbYAxisMap = &m_Joypads[destIndex].m_fNormalizedLeftThumbY;
|
||||
m_Joypads[destIndex].m_pfRightThumbXAxisMap = &m_Joypads[destIndex].m_fNormalizedRightThumbX;
|
||||
m_Joypads[destIndex].m_pfRightThumbYAxisMap = &m_Joypads[destIndex].m_fNormalizedRightThumbY;
|
||||
m_Joypads[destIndex].m_pucLeftTriggerAxisMap = &m_Joypads[destIndex].m_ucLeftTriggerState;
|
||||
m_Joypads[destIndex].m_pucRightTriggerAxisMap = &m_Joypads[destIndex].m_ucRightTriggerState;
|
||||
}
|
||||
|
||||
void CInput::ClearGamepadSlot(int index)
|
||||
{
|
||||
m_Joypads[index].m_pGamepad = nullptr;
|
||||
m_Joypads[index].m_bIsConnected = false;
|
||||
m_Joypads[index].m_uiButtons = 0;
|
||||
m_Joypads[index].m_ucInputStateIndex = -1;
|
||||
m_Joypads[index].m_ucLeftTriggerState = 0;
|
||||
m_Joypads[index].m_ucRightTriggerState = 0;
|
||||
m_Joypads[index].m_iRightThumbX = 0;
|
||||
m_Joypads[index].m_iRightThumbY = 0;
|
||||
|
||||
m_Joypads[index].m_pfLeftThumbXAxisMap = &m_Joypads[index].m_fNormalizedLeftThumbX;
|
||||
m_Joypads[index].m_pfLeftThumbYAxisMap = &m_Joypads[index].m_fNormalizedLeftThumbY;
|
||||
m_Joypads[index].m_pfRightThumbXAxisMap = &m_Joypads[index].m_fNormalizedRightThumbX;
|
||||
m_Joypads[index].m_pfRightThumbYAxisMap = &m_Joypads[index].m_fNormalizedRightThumbY;
|
||||
m_Joypads[index].m_pucLeftTriggerAxisMap = &m_Joypads[index].m_ucLeftTriggerState;
|
||||
m_Joypads[index].m_pucRightTriggerAxisMap = &m_Joypads[index].m_ucRightTriggerState;
|
||||
}
|
||||
|
||||
bool CInput::UpdateJoypads()
|
||||
{
|
||||
assert(m_bJoypadMapArrayIsSetup);
|
||||
|
||||
@@ -31,6 +31,26 @@ SOFTWARE.
|
||||
|
||||
class CInput
|
||||
{
|
||||
private:
|
||||
const char* GamepadTypeName(SDL_GamepadType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case SDL_GAMEPAD_TYPE_UNKNOWN: return "UNKNOWN";
|
||||
case SDL_GAMEPAD_TYPE_GAMECUBE: return "GAMECUBE";
|
||||
case SDL_GAMEPAD_TYPE_STANDARD: return "STANDARD";
|
||||
case SDL_GAMEPAD_TYPE_XBOX360: return "XBOX360";
|
||||
case SDL_GAMEPAD_TYPE_XBOXONE: return "XBOXONE";
|
||||
case SDL_GAMEPAD_TYPE_PS3: return "PS3";
|
||||
case SDL_GAMEPAD_TYPE_PS4: return "PS4";
|
||||
case SDL_GAMEPAD_TYPE_PS5: return "PS5";
|
||||
case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_PRO: return "SWITCH_PRO";
|
||||
case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_LEFT: return "JOYCON_L";
|
||||
case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT: return "JOYCON_R";
|
||||
case SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR: return "JOYCON_PAIR";
|
||||
default: return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
public:
|
||||
struct JOYPAD
|
||||
{
|
||||
@@ -101,6 +121,7 @@ public:
|
||||
|
||||
void SetGameJoypadMaps(unsigned char ucMap, unsigned char ucAction, unsigned int uiActionVal);
|
||||
unsigned int GetGameJoypadMaps(unsigned char ucMap, unsigned char ucAction);
|
||||
const char* GetGamepadType(int iPad);
|
||||
void SetJoypadMapVal(int iPad, unsigned char ucMap);
|
||||
unsigned char GetJoypadMapVal(int iPad);
|
||||
|
||||
@@ -137,6 +158,8 @@ public:
|
||||
FLOAT GetIdleSeconds(int iPad);
|
||||
|
||||
void HandleGamepadEvents();
|
||||
void ShiftGamepadData(int destIndex, int srcIndex);
|
||||
void ClearGamepadSlot(int index);
|
||||
bool UpdateJoypads(void);
|
||||
void ClearJoypadValues(JOYPAD *pThisPad);
|
||||
|
||||
|
||||
@@ -160,10 +160,6 @@
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
<PreLinkEvent>
|
||||
<Command>
|
||||
</Command>
|
||||
</PreLinkEvent>
|
||||
<PreBuildEvent>
|
||||
<Command>./Windows64/shaders/build.bat</Command>
|
||||
</PreBuildEvent>
|
||||
@@ -208,6 +204,9 @@
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
</Link>
|
||||
<PreBuildEvent>
|
||||
<Command>./Windows64/shaders/build.bat</Command>
|
||||
</PreBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
||||
@@ -135,6 +135,7 @@ public:
|
||||
EKeyboardResult RequestKeyboard(LPCWSTR Title, LPCWSTR Text, DWORD dwPad, UINT uiMaxChars, int( *Func)(LPVOID,const bool),LPVOID lpParam,C_4JInput::EKeyboardMode eMode);
|
||||
void DestroyKeyboard();
|
||||
void GetText(uint16_t *UTF16String);
|
||||
const char* PollControllerType(int ipad);
|
||||
|
||||
void SetLostInputControlCallback(void( *Func)(LPVOID, bool),LPVOID lpParam);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user