mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-04-02 19:08:03 -06:00
hook up the new backend's lightbar colour values
This temorarily breaks override_controller_color, but that already only worked correctly with one gamepad anyway.
This commit is contained in:
parent
d0580a11fa
commit
7fe034f3ca
@ -284,7 +284,7 @@ int PS4_SYSV_ABI scePadOpen(Libraries::UserService::OrbisUserServiceUserId userI
|
||||
if (!u) {
|
||||
return ORBIS_DEVICE_SERVICE_ERROR_USER_NOT_LOGIN;
|
||||
}
|
||||
s32 pad_handle = u->controller_port;
|
||||
s32 pad_handle = u->player_index;
|
||||
LOG_INFO(Lib_Pad, "(DUMMY) called user_id = {} type = {} index = {}, pad_handle = {}", userId,
|
||||
type, index, pad_handle);
|
||||
g_opened = true;
|
||||
@ -480,7 +480,20 @@ int PS4_SYSV_ABI scePadResetLightBar(s32 handle) {
|
||||
return ORBIS_PAD_ERROR_INVALID_HANDLE;
|
||||
}
|
||||
auto controllers = *Common::Singleton<GameControllers>::Instance();
|
||||
Input::Colour colour = GameControllers::GetControllerCustomColor();
|
||||
s32 colour_index = UserManagement.GetUserByPlayerIndex(handle)->user_color - 1;
|
||||
Input::Colour colour{255, 0, 0};
|
||||
if (colour_index >= 0 && colour_index <= 3) {
|
||||
static constexpr Input::Colour colours[4]{
|
||||
{0, 0, 255}, // blue
|
||||
{255, 0, 0}, // red
|
||||
{0, 255, 0}, // green
|
||||
{255, 0, 255}, // pink
|
||||
};
|
||||
colour = colours[colour_index];
|
||||
} else {
|
||||
LOG_ERROR(Lib_Pad, "Invalid user colour value {} for controller {}, falling back to blue",
|
||||
colour_index, handle);
|
||||
}
|
||||
controllers[*controller_id]->SetLightBarRGB(colour.r, colour.g, colour.b);
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
@ -598,11 +598,11 @@ s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(OrbisUserServiceLoginUserIdLis
|
||||
std::vector<User> valid_users;
|
||||
std::copy_if(
|
||||
all_users.begin(), all_users.end(), std::back_inserter(valid_users),
|
||||
[](const User& user) { return user.controller_port >= 1 && user.controller_port <= 4; });
|
||||
[](const User& user) { return user.player_index >= 1 && user.player_index <= 4; });
|
||||
|
||||
// Sort filtered users by port assignment (1-4)
|
||||
std::sort(valid_users.begin(), valid_users.end(),
|
||||
[](const User& a, const User& b) { return a.controller_port < b.controller_port; });
|
||||
[](const User& a, const User& b) { return a.player_index < b.player_index; });
|
||||
|
||||
// Fill slots consecutively based on sorted valid users
|
||||
int num_users =
|
||||
@ -611,7 +611,7 @@ s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(OrbisUserServiceLoginUserIdLis
|
||||
for (int i = 0; i < num_users; i++) {
|
||||
userIdList->user_id[i] = valid_users[i].user_id;
|
||||
LOG_DEBUG(Lib_UserService, "Slot {}: User ID {} (port {})", i, valid_users[i].user_id,
|
||||
valid_users[i].controller_port);
|
||||
valid_users[i].player_index);
|
||||
}
|
||||
|
||||
LOG_DEBUG(Lib_UserService, "Returning {} logged-in users with valid port assignments",
|
||||
|
||||
@ -74,7 +74,7 @@ User* UserManager::GetUserByID(s32 user_id) {
|
||||
|
||||
User* UserManager::GetUserByPlayerIndex(s32 index) {
|
||||
for (auto& u : m_users.user) {
|
||||
if (u.controller_port == index)
|
||||
if (u.player_index == index)
|
||||
return &u;
|
||||
}
|
||||
return nullptr;
|
||||
@ -84,23 +84,48 @@ const std::vector<User>& UserManager::GetAllUsers() const {
|
||||
return m_users.user;
|
||||
}
|
||||
|
||||
std::vector<User> UserManager::CreateDefaultUser() {
|
||||
User default_user;
|
||||
default_user.user_id = 1;
|
||||
default_user.user_color = 0; // BLUE
|
||||
default_user.user_name = "shadPS4";
|
||||
default_user.controller_port = 1;
|
||||
Users UserManager::CreateDefaultUsers() {
|
||||
Users default_users;
|
||||
default_users.default_user_id = 1;
|
||||
default_users.user = {
|
||||
{
|
||||
.user_id = 1000,
|
||||
.user_name = "shadPS4",
|
||||
.user_color = 1,
|
||||
.player_index = 1,
|
||||
},
|
||||
{
|
||||
.user_id = 1001,
|
||||
.user_name = "shadPS4-2",
|
||||
.user_color = 2,
|
||||
.player_index = 2,
|
||||
},
|
||||
{
|
||||
.user_id = 1002,
|
||||
.user_name = "shadPS4-3",
|
||||
.user_color = 3,
|
||||
.player_index = 3,
|
||||
},
|
||||
{
|
||||
.user_id = 1003,
|
||||
.user_name = "shadPS4-4",
|
||||
.user_color = 4,
|
||||
.player_index = 4,
|
||||
},
|
||||
};
|
||||
|
||||
const auto user_dir = EmulatorSettings.GetHomeDir() / std::to_string(default_user.user_id);
|
||||
for (auto& u : default_users.user) {
|
||||
const auto user_dir = EmulatorSettings.GetHomeDir() / std::to_string(u.user_id);
|
||||
|
||||
if (!std::filesystem::exists(user_dir)) {
|
||||
std::filesystem::create_directory(user_dir);
|
||||
std::filesystem::create_directory(user_dir / "savedata");
|
||||
std::filesystem::create_directory(user_dir / "trophy");
|
||||
std::filesystem::create_directory(user_dir / "inputs");
|
||||
if (!std::filesystem::exists(user_dir)) {
|
||||
std::filesystem::create_directory(user_dir);
|
||||
std::filesystem::create_directory(user_dir / "savedata");
|
||||
std::filesystem::create_directory(user_dir / "trophy");
|
||||
std::filesystem::create_directory(user_dir / "inputs");
|
||||
}
|
||||
}
|
||||
|
||||
return {default_user};
|
||||
return default_users;
|
||||
}
|
||||
|
||||
bool UserManager::SetDefaultUser(u32 user_id) {
|
||||
@ -120,10 +145,10 @@ User UserManager::GetDefaultUser() {
|
||||
|
||||
void UserManager::SetControllerPort(u32 user_id, int port) {
|
||||
for (auto& u : m_users.user) {
|
||||
if (u.user_id != user_id && u.controller_port == port)
|
||||
u.controller_port = -1;
|
||||
if (u.user_id != user_id && u.player_index == port)
|
||||
u.player_index = -1;
|
||||
if (u.user_id == user_id)
|
||||
u.controller_port = port;
|
||||
u.player_index = port;
|
||||
}
|
||||
Save();
|
||||
}
|
||||
|
||||
@ -10,17 +10,17 @@
|
||||
|
||||
struct User {
|
||||
s32 user_id;
|
||||
u32 user_color;
|
||||
std::string user_name;
|
||||
int controller_port; // 1-4
|
||||
u32 user_color;
|
||||
int player_index; // 1-4
|
||||
};
|
||||
|
||||
struct Users {
|
||||
int default_user_id = 1;
|
||||
std::vector<User> user {};
|
||||
std::vector<User> user{};
|
||||
std::string commit_hash{};
|
||||
};
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(User, user_id, user_color, user_name, controller_port)
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(User, user_id, user_color, user_name, player_index)
|
||||
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Users, default_user_id, user, commit_hash)
|
||||
|
||||
class UserManager {
|
||||
@ -33,7 +33,7 @@ public:
|
||||
User* GetUserByID(s32 user_id);
|
||||
User* GetUserByPlayerIndex(s32 index);
|
||||
const std::vector<User>& GetAllUsers() const;
|
||||
std::vector<User> CreateDefaultUser();
|
||||
Users CreateDefaultUsers();
|
||||
bool SetDefaultUser(u32 user_id);
|
||||
User GetDefaultUser();
|
||||
void SetControllerPort(u32 user_id, int port);
|
||||
|
||||
@ -62,8 +62,7 @@ bool UserSettingsImpl::Load() {
|
||||
LOG_DEBUG(EmuSettings, "User settings file not found: {}", path.string());
|
||||
// Create default user if no file exists
|
||||
if (m_userManager.GetUsers().user.empty()) {
|
||||
m_userManager.GetUsers().user = m_userManager.CreateDefaultUser();
|
||||
m_userManager.GetUsers().default_user_id = 1;
|
||||
m_userManager.GetUsers() = m_userManager.CreateDefaultUsers();
|
||||
}
|
||||
Save(); // Save default users
|
||||
return false;
|
||||
@ -79,34 +78,7 @@ bool UserSettingsImpl::Load() {
|
||||
in >> j;
|
||||
|
||||
// Create a default Users object
|
||||
Users default_users;
|
||||
default_users.default_user_id = 1;
|
||||
default_users.user = {
|
||||
{
|
||||
.user_id = 1000,
|
||||
.user_color = 1,
|
||||
.user_name = "shadPS4",
|
||||
.controller_port = 1,
|
||||
},
|
||||
{
|
||||
.user_id = 1001,
|
||||
.user_color = 2,
|
||||
.user_name = "shadPS4-2",
|
||||
.controller_port = 2,
|
||||
},
|
||||
{
|
||||
.user_id = 1002,
|
||||
.user_color = 3,
|
||||
.user_name = "shadPS4-3",
|
||||
.controller_port = 3,
|
||||
},
|
||||
{
|
||||
.user_id = 1003,
|
||||
.user_color = 4,
|
||||
.user_name = "shadPS4-4",
|
||||
.controller_port = 4,
|
||||
},
|
||||
};
|
||||
auto default_users = m_userManager.CreateDefaultUsers();
|
||||
|
||||
// Convert default_users to json for merging
|
||||
json default_json;
|
||||
@ -131,8 +103,7 @@ bool UserSettingsImpl::Load() {
|
||||
LOG_ERROR(EmuSettings, "Error loading user settings: {}", e.what());
|
||||
// Fall back to defaults
|
||||
if (m_userManager.GetUsers().user.empty()) {
|
||||
m_userManager.GetUsers().user = m_userManager.CreateDefaultUser();
|
||||
m_userManager.GetUsers().default_user_id = 1;
|
||||
m_userManager.GetUsers() = m_userManager.CreateDefaultUsers();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -387,7 +387,7 @@ std::optional<u8> GameControllers::GetControllerIndexFromUserID(s32 user_id) {
|
||||
if (!u) {
|
||||
return std::nullopt;
|
||||
}
|
||||
return u->controller_port - 1;
|
||||
return u->player_index - 1;
|
||||
}
|
||||
|
||||
std::optional<u8> GameControllers::GetControllerIndexFromControllerID(s32 controller_id) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user