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;
 | 
					    // Fetch the lightbar color based on the time of day
 | 
				
			||||||
    auto g = isNight ? 0 : 37;
 | 
					    uint8_t r = 0, g = 0, b = 0;
 | 
				
			||||||
    auto b = isNight ? 101 : 184;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    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)
 | 
					int HID_OnSDLEvent(void*, SDL_Event* event)
 | 
				
			||||||
| 
						 | 
					@ -228,13 +244,32 @@ int HID_OnSDLEvent(void*, SDL_Event* event)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (freeIndex != -1)
 | 
					        if (freeIndex != -1)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            // Initialize the new controller
 | 
				
			||||||
            auto controller = Controller(event->cdevice.which);
 | 
					            auto controller = Controller(event->cdevice.which);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            g_controllers[freeIndex] = controller;
 | 
					            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;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -243,8 +278,43 @@ int HID_OnSDLEvent(void*, SDL_Event* event)
 | 
				
			||||||
        auto* controller = FindController(event->cdevice.which);
 | 
					        auto* controller = FindController(event->cdevice.which);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (controller)
 | 
					        if (controller)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
            controller->Close();
 | 
					            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;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -258,6 +328,7 @@ int HID_OnSDLEvent(void*, SDL_Event* event)
 | 
				
			||||||
        if (!controller)
 | 
					        if (!controller)
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Process input
 | 
				
			||||||
        if (event->type == SDL_CONTROLLERAXISMOTION)
 | 
					        if (event->type == SDL_CONTROLLERAXISMOTION)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (abs(event->caxis.value) > 8000)
 | 
					            if (abs(event->caxis.value) > 8000)
 | 
				
			||||||
| 
						 | 
					@ -276,43 +347,8 @@ int HID_OnSDLEvent(void*, SDL_Event* event)
 | 
				
			||||||
            controller->Poll();
 | 
					            controller->Poll();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            break;
 | 
					        // Instantly apply updated lightbar settings during input
 | 
				
			||||||
        }
 | 
					        SetControllerTimeOfDayLED(*controller, App::s_isWerehog);
 | 
				
			||||||
 | 
					 | 
				
			||||||
        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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue