Daniele Bartolini 10 лет назад
Родитель
Сommit
0b2a4d58a3
1 измененных файлов с 31 добавлено и 13 удалено
  1. 31 13
      src/main/main_windows.cpp

+ 31 - 13
src/main/main_windows.cpp

@@ -190,64 +190,82 @@ struct Joypad
 
 			if (state.Gamepad.sThumbLX != gamepad.sThumbLX)
 			{
-				int32_t value = state.Gamepad.sThumbLX;
+				SHORT value = state.Gamepad.sThumbLX;
 				value = value > XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE || value < -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE
 					? value : 0;
 
-				_axis[0].lx = (float)value / (float)INT16_MAX;
+				_axis[0].lx = value != 0
+					? float(value + (value < 0 ? XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE : -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)) / float(INT16_MAX - XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
+					: 0.0f
+					;
 				queue.push_joypad_event(i, JoypadAxis::LEFT, _axis[0].lx, _axis[0].ly, _axis[0].lz);
 
 				gamepad.sThumbLX = state.Gamepad.sThumbLX;
 			}
 			if (state.Gamepad.sThumbLY != gamepad.sThumbLY)
 			{
-				int32_t value = state.Gamepad.sThumbLY;
+				SHORT value = state.Gamepad.sThumbLY;
 				value = value > XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE || value < -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE
 					? value : 0;
 
-				_axis[0].ly = (float)value / (float)INT16_MAX;
+				_axis[0].ly = value != 0
+					? float(value + (value < 0 ? XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE : -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)) / float(INT16_MAX - XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE)
+					: 0.0f
+					;
 				queue.push_joypad_event(i, JoypadAxis::LEFT, _axis[0].lx, _axis[0].ly, _axis[0].lz);
 
 				gamepad.sThumbLY = state.Gamepad.sThumbLY;
 			}
 			if (state.Gamepad.bLeftTrigger != gamepad.bLeftTrigger)
 			{
-				int32_t value = state.Gamepad.bLeftTrigger;
-				value = value >XINPUT_GAMEPAD_TRIGGER_THRESHOLD ? value : 0;
+				BYTE value = state.Gamepad.bLeftTrigger;
+				value = value > XINPUT_GAMEPAD_TRIGGER_THRESHOLD ? value : 0;
 
-				_axis[0].lz = (float)value / (float)UINT8_MAX;
+				_axis[0].lz = value != 0
+					? float(value + (value < 0 ? XINPUT_GAMEPAD_TRIGGER_THRESHOLD : -XINPUT_GAMEPAD_TRIGGER_THRESHOLD)) / float(UINT8_MAX - XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
+					: 0.0f
+					;
 				queue.push_joypad_event(i, JoypadAxis::LEFT, _axis[0].lx, _axis[0].ly, _axis[0].lz);
 
 				gamepad.bLeftTrigger = state.Gamepad.bLeftTrigger;
 			}
 			if (state.Gamepad.sThumbRX != gamepad.sThumbRX)
 			{
-				int32_t value = state.Gamepad.sThumbRX;
+				SHORT value = state.Gamepad.sThumbRX;
 				value = value > XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE || value < -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE
 					? value : 0;
 
-				_axis[0].rx = (float)value / (float)INT16_MAX;
+				_axis[0].rx = value != 0
+					? float(value + (value < 0 ? XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE : -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)) / float(INT16_MAX - XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)
+					: 0.0f
+					;
 				queue.push_joypad_event(i, JoypadAxis::RIGHT, _axis[0].rx, _axis[0].ry, _axis[0].rz);
 
 				gamepad.sThumbRX = state.Gamepad.sThumbRX;
 			}
 			if (state.Gamepad.sThumbRY != gamepad.sThumbRY)
 			{
-				int32_t value = state.Gamepad.sThumbRY;
+				SHORT value = state.Gamepad.sThumbRY;
 				value = value > XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE || value < -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE
 					? value : 0;
 
-				_axis[0].ry = (float)value / (float)INT16_MAX;
+				_axis[0].ry = value != 0
+					? float(value + (value < 0 ? XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE : -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)) / float(INT16_MAX - XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE)
+					: 0.0f
+					;
 				queue.push_joypad_event(i, JoypadAxis::RIGHT, _axis[0].rx, _axis[0].ry, _axis[0].rz);
 
 				gamepad.sThumbRY = state.Gamepad.sThumbRY;
 			}
 			if (state.Gamepad.bRightTrigger != gamepad.bRightTrigger)
 			{
-				int32_t value = state.Gamepad.bRightTrigger;
+				BYTE value = state.Gamepad.bRightTrigger;
 				value = value > XINPUT_GAMEPAD_TRIGGER_THRESHOLD ? value : 0;
 
-				_axis[0].rz = (float)value / (float)UINT8_MAX;
+				_axis[0].rz = value != 0
+					? float(value + (value < 0 ? XINPUT_GAMEPAD_TRIGGER_THRESHOLD : -XINPUT_GAMEPAD_TRIGGER_THRESHOLD)) / float(UINT8_MAX - XINPUT_GAMEPAD_TRIGGER_THRESHOLD)
+					: 0.0f
+					;
 				queue.push_joypad_event(i, JoypadAxis::RIGHT, _axis[0].rx, _axis[0].ry, _axis[0].rz);
 
 				gamepad.bRightTrigger = state.Gamepad.bRightTrigger;