mirror of
				https://github.com/hedge-dev/UnleashedRecomp.git
				synced 2025-10-30 07:11:05 +00:00 
			
		
		
		
	Compare commits
	
		
			23 commits
		
	
	
		
			a2f98428b0
			...
			fc69a51c48
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | fc69a51c48 | ||
|   | 2385bd435a | ||
|   | 6e7a2f6a13 | ||
|   | b1d446cf2d | ||
|   | de94e9004f | ||
|   | cebf5e6a1b | ||
|   | 8758808d6e | ||
|   | aedc26bf70 | ||
|   | bbad87a0ed | ||
|   | 5fc38a1b81 | ||
|   | 75dacf5578 | ||
|   | 458938c2ae | ||
|   | a96fc60dcd | ||
|   | c9b3a5e03f | ||
|   | a8cac8763d | ||
|   | ef4e37cb41 | ||
|   | bec2cf65ba | ||
|   | 43091838af | ||
|   | 90b35bc593 | ||
|   | 9a181e0839 | ||
|   | 176bb625e2 | ||
|   | 07d193e229 | ||
|   | 574afdf53d | 
					 1 changed files with 114 additions and 78 deletions
				
			
		|  | @ -209,13 +209,29 @@ static void SetControllerInputDevice(Controller* controller) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| static void SetControllerTimeOfDayLED(Controller& controller, bool isNight) | ||||
| static void SetControllerTimeOfDayLED(Controller& ctrl, bool isNight) | ||||
| { | ||||
|     auto r = isNight ? 22 : 0; | ||||
|     auto g = isNight ? 0 : 37; | ||||
|     auto b = isNight ? 101 : 184; | ||||
|     // Fetch the lightbar color based on the time of day
 | ||||
|     uint8_t r = 0, g = 0, b = 0; | ||||
| 
 | ||||
|     controller.SetLED(r, g, b); | ||||
|     if (isNight) | ||||
|     { | ||||
|         r = 22;  // Night: Red tone
 | ||||
|         g = 0;   // Night: No green
 | ||||
|         b = 101; // Night: Cool blue
 | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         r = 0;   // Day: No red
 | ||||
|         g = 0;   // Day: No green
 | ||||
|         b = 60;  // Day: Dimmer blue
 | ||||
|     } | ||||
| 
 | ||||
|     // Apply the lightbar color to the specified controller
 | ||||
|     if (ctrl.CanPoll()) | ||||
|     { | ||||
|         ctrl.SetLED(r, g, b); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int HID_OnSDLEvent(void*, SDL_Event* event) | ||||
|  | @ -228,13 +244,32 @@ int HID_OnSDLEvent(void*, SDL_Event* event) | |||
| 
 | ||||
|         if (freeIndex != -1) | ||||
|         { | ||||
|             // Initialize the new controller
 | ||||
|             auto controller = Controller(event->cdevice.which); | ||||
| 
 | ||||
|             g_controllers[freeIndex] = controller; | ||||
| 
 | ||||
|                 SetControllerTimeOfDayLED(controller, App::s_isWerehog); | ||||
|             // Assign "Player 1 LED" for Player 0 and Player 1
 | ||||
|             if (freeIndex == 0 || freeIndex == 1) // Player 0 and Player 1 both use "Player 1 LED"
 | ||||
|             { | ||||
|                 SDL_GameControllerSetPlayerIndex(controller.controller, 1); // Force Player LED to "Player 1"
 | ||||
|             } | ||||
|             else // Additional external controllers (Player 2+)
 | ||||
|             { | ||||
|                 SDL_GameControllerSetPlayerIndex(controller.controller, freeIndex); // Assign correct LED for Player 2+
 | ||||
|             } | ||||
| 
 | ||||
|             // Apply lightbar settings immediately for the new controller
 | ||||
|             SetControllerTimeOfDayLED(controller, App::s_isWerehog); | ||||
| 
 | ||||
|             // Refresh LEDs for all connected controllers
 | ||||
|             for (auto& ctrl : g_controllers) | ||||
|             { | ||||
|                 if (ctrl.CanPoll()) | ||||
|                 { | ||||
|                     SDL_GameControllerSetPlayerIndex(ctrl.controller, ctrl.index); // Ensure correct LED updates
 | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|  | @ -243,8 +278,43 @@ int HID_OnSDLEvent(void*, SDL_Event* event) | |||
|         auto* controller = FindController(event->cdevice.which); | ||||
| 
 | ||||
|         if (controller) | ||||
|         { | ||||
|             controller->Close(); | ||||
| 
 | ||||
|             // If Player 1 disconnects, promote the next available controller to Player 1
 | ||||
|             if (controller == &g_controllers[1]) // Player 1 removed
 | ||||
|             { | ||||
|                 for (auto& ctrl : g_controllers) | ||||
|                 { | ||||
|                     if (ctrl.CanPoll() && &ctrl != &g_controllers[0]) // Skip Player 0
 | ||||
|                     { | ||||
|                         g_controllers[1] = ctrl; // Promote next available controller to Player 1
 | ||||
|                         SDL_GameControllerSetPlayerIndex(ctrl.controller, 1); // Reflect Player 1 LED
 | ||||
|                         SetControllerTimeOfDayLED(ctrl, App::s_isWerehog); // Update lightbar
 | ||||
|                         break; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // Update Player LED indices for all controllers immediately
 | ||||
|             for (std::size_t i = 2; i < g_controllers.size(); ++i) // Start from Player 2 onward
 | ||||
|             { | ||||
|                 if (g_controllers[i].CanPoll()) | ||||
|                 { | ||||
|                     SDL_GameControllerSetPlayerIndex(g_controllers[i].controller, static_cast<int>(i)); // Assign correct LED index
 | ||||
|                     SetControllerTimeOfDayLED(g_controllers[i], App::s_isWerehog); // Update lightbars
 | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // Refresh lightbar settings for all connected controllers
 | ||||
|             for (auto& ctrl : g_controllers) | ||||
|             { | ||||
|                 if (ctrl.CanPoll()) | ||||
|                 { | ||||
|                     SetControllerTimeOfDayLED(ctrl, App::s_isWerehog); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
| 
 | ||||
|  | @ -258,6 +328,7 @@ int HID_OnSDLEvent(void*, SDL_Event* event) | |||
|         if (!controller) | ||||
|             break; | ||||
| 
 | ||||
|         // Process input
 | ||||
|         if (event->type == SDL_CONTROLLERAXISMOTION) | ||||
|         { | ||||
|             if (abs(event->caxis.value) > 8000) | ||||
|  | @ -276,43 +347,8 @@ int HID_OnSDLEvent(void*, SDL_Event* event) | |||
|             controller->Poll(); | ||||
|         } | ||||
| 
 | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         case SDL_KEYDOWN: | ||||
|         case SDL_KEYUP: | ||||
|             hid::g_inputDevice = hid::EInputDevice::Keyboard; | ||||
|             break; | ||||
| 
 | ||||
|         case SDL_MOUSEMOTION: | ||||
|         case SDL_MOUSEBUTTONDOWN: | ||||
|         case SDL_MOUSEBUTTONUP: | ||||
|         { | ||||
|             if (!GameWindow::IsFullscreen() || GameWindow::s_isFullscreenCursorVisible) | ||||
|                 SDL_ShowCursor(SDL_ENABLE); | ||||
| 
 | ||||
|             hid::g_inputDevice = hid::EInputDevice::Mouse; | ||||
| 
 | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         case SDL_WINDOWEVENT: | ||||
|         { | ||||
|             if (event->window.event == SDL_WINDOWEVENT_FOCUS_LOST) | ||||
|             { | ||||
|                 // Stop vibrating controllers on focus lost.
 | ||||
|                 for (auto& controller : g_controllers) | ||||
|                     controller.SetVibration({ 0, 0 }); | ||||
|             } | ||||
| 
 | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         case SDL_USER_EVILSONIC: | ||||
|         { | ||||
|             for (auto& controller : g_controllers) | ||||
|                 SetControllerTimeOfDayLED(controller, event->user.code); | ||||
| 
 | ||||
|         // Instantly apply updated lightbar settings during input
 | ||||
|         SetControllerTimeOfDayLED(*controller, App::s_isWerehog); | ||||
|         break; | ||||
|     } | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue