mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2026-06-03 22:45:00 -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) {
|
if (!u) {
|
||||||
return ORBIS_DEVICE_SERVICE_ERROR_USER_NOT_LOGIN;
|
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,
|
LOG_INFO(Lib_Pad, "(DUMMY) called user_id = {} type = {} index = {}, pad_handle = {}", userId,
|
||||||
type, index, pad_handle);
|
type, index, pad_handle);
|
||||||
g_opened = true;
|
g_opened = true;
|
||||||
@ -480,7 +480,20 @@ int PS4_SYSV_ABI scePadResetLightBar(s32 handle) {
|
|||||||
return ORBIS_PAD_ERROR_INVALID_HANDLE;
|
return ORBIS_PAD_ERROR_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
auto controllers = *Common::Singleton<GameControllers>::Instance();
|
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);
|
controllers[*controller_id]->SetLightBarRGB(colour.r, colour.g, colour.b);
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -598,11 +598,11 @@ s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(OrbisUserServiceLoginUserIdLis
|
|||||||
std::vector<User> valid_users;
|
std::vector<User> valid_users;
|
||||||
std::copy_if(
|
std::copy_if(
|
||||||
all_users.begin(), all_users.end(), std::back_inserter(valid_users),
|
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)
|
// Sort filtered users by port assignment (1-4)
|
||||||
std::sort(valid_users.begin(), valid_users.end(),
|
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
|
// Fill slots consecutively based on sorted valid users
|
||||||
int num_users =
|
int num_users =
|
||||||
@ -611,7 +611,7 @@ s32 PS4_SYSV_ABI sceUserServiceGetLoginUserIdList(OrbisUserServiceLoginUserIdLis
|
|||||||
for (int i = 0; i < num_users; i++) {
|
for (int i = 0; i < num_users; i++) {
|
||||||
userIdList->user_id[i] = valid_users[i].user_id;
|
userIdList->user_id[i] = valid_users[i].user_id;
|
||||||
LOG_DEBUG(Lib_UserService, "Slot {}: User ID {} (port {})", 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",
|
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) {
|
User* UserManager::GetUserByPlayerIndex(s32 index) {
|
||||||
for (auto& u : m_users.user) {
|
for (auto& u : m_users.user) {
|
||||||
if (u.controller_port == index)
|
if (u.player_index == index)
|
||||||
return &u;
|
return &u;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -84,23 +84,48 @@ const std::vector<User>& UserManager::GetAllUsers() const {
|
|||||||
return m_users.user;
|
return m_users.user;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<User> UserManager::CreateDefaultUser() {
|
Users UserManager::CreateDefaultUsers() {
|
||||||
User default_user;
|
Users default_users;
|
||||||
default_user.user_id = 1;
|
default_users.default_user_id = 1;
|
||||||
default_user.user_color = 0; // BLUE
|
default_users.user = {
|
||||||
default_user.user_name = "shadPS4";
|
{
|
||||||
default_user.controller_port = 1;
|
.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)) {
|
if (!std::filesystem::exists(user_dir)) {
|
||||||
std::filesystem::create_directory(user_dir);
|
std::filesystem::create_directory(user_dir);
|
||||||
std::filesystem::create_directory(user_dir / "savedata");
|
std::filesystem::create_directory(user_dir / "savedata");
|
||||||
std::filesystem::create_directory(user_dir / "trophy");
|
std::filesystem::create_directory(user_dir / "trophy");
|
||||||
std::filesystem::create_directory(user_dir / "inputs");
|
std::filesystem::create_directory(user_dir / "inputs");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {default_user};
|
return default_users;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UserManager::SetDefaultUser(u32 user_id) {
|
bool UserManager::SetDefaultUser(u32 user_id) {
|
||||||
@ -120,10 +145,10 @@ User UserManager::GetDefaultUser() {
|
|||||||
|
|
||||||
void UserManager::SetControllerPort(u32 user_id, int port) {
|
void UserManager::SetControllerPort(u32 user_id, int port) {
|
||||||
for (auto& u : m_users.user) {
|
for (auto& u : m_users.user) {
|
||||||
if (u.user_id != user_id && u.controller_port == port)
|
if (u.user_id != user_id && u.player_index == port)
|
||||||
u.controller_port = -1;
|
u.player_index = -1;
|
||||||
if (u.user_id == user_id)
|
if (u.user_id == user_id)
|
||||||
u.controller_port = port;
|
u.player_index = port;
|
||||||
}
|
}
|
||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,17 +10,17 @@
|
|||||||
|
|
||||||
struct User {
|
struct User {
|
||||||
s32 user_id;
|
s32 user_id;
|
||||||
u32 user_color;
|
|
||||||
std::string user_name;
|
std::string user_name;
|
||||||
int controller_port; // 1-4
|
u32 user_color;
|
||||||
|
int player_index; // 1-4
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Users {
|
struct Users {
|
||||||
int default_user_id = 1;
|
int default_user_id = 1;
|
||||||
std::vector<User> user {};
|
std::vector<User> user{};
|
||||||
std::string commit_hash{};
|
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)
|
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Users, default_user_id, user, commit_hash)
|
||||||
|
|
||||||
class UserManager {
|
class UserManager {
|
||||||
@ -33,7 +33,7 @@ public:
|
|||||||
User* GetUserByID(s32 user_id);
|
User* GetUserByID(s32 user_id);
|
||||||
User* GetUserByPlayerIndex(s32 index);
|
User* GetUserByPlayerIndex(s32 index);
|
||||||
const std::vector<User>& GetAllUsers() const;
|
const std::vector<User>& GetAllUsers() const;
|
||||||
std::vector<User> CreateDefaultUser();
|
Users CreateDefaultUsers();
|
||||||
bool SetDefaultUser(u32 user_id);
|
bool SetDefaultUser(u32 user_id);
|
||||||
User GetDefaultUser();
|
User GetDefaultUser();
|
||||||
void SetControllerPort(u32 user_id, int port);
|
void SetControllerPort(u32 user_id, int port);
|
||||||
|
|||||||
@ -62,8 +62,7 @@ bool UserSettingsImpl::Load() {
|
|||||||
LOG_DEBUG(EmuSettings, "User settings file not found: {}", path.string());
|
LOG_DEBUG(EmuSettings, "User settings file not found: {}", path.string());
|
||||||
// Create default user if no file exists
|
// Create default user if no file exists
|
||||||
if (m_userManager.GetUsers().user.empty()) {
|
if (m_userManager.GetUsers().user.empty()) {
|
||||||
m_userManager.GetUsers().user = m_userManager.CreateDefaultUser();
|
m_userManager.GetUsers() = m_userManager.CreateDefaultUsers();
|
||||||
m_userManager.GetUsers().default_user_id = 1;
|
|
||||||
}
|
}
|
||||||
Save(); // Save default users
|
Save(); // Save default users
|
||||||
return false;
|
return false;
|
||||||
@ -79,34 +78,7 @@ bool UserSettingsImpl::Load() {
|
|||||||
in >> j;
|
in >> j;
|
||||||
|
|
||||||
// Create a default Users object
|
// Create a default Users object
|
||||||
Users default_users;
|
auto default_users = m_userManager.CreateDefaultUsers();
|
||||||
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,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convert default_users to json for merging
|
// Convert default_users to json for merging
|
||||||
json default_json;
|
json default_json;
|
||||||
@ -131,8 +103,7 @@ bool UserSettingsImpl::Load() {
|
|||||||
LOG_ERROR(EmuSettings, "Error loading user settings: {}", e.what());
|
LOG_ERROR(EmuSettings, "Error loading user settings: {}", e.what());
|
||||||
// Fall back to defaults
|
// Fall back to defaults
|
||||||
if (m_userManager.GetUsers().user.empty()) {
|
if (m_userManager.GetUsers().user.empty()) {
|
||||||
m_userManager.GetUsers().user = m_userManager.CreateDefaultUser();
|
m_userManager.GetUsers() = m_userManager.CreateDefaultUsers();
|
||||||
m_userManager.GetUsers().default_user_id = 1;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -387,7 +387,7 @@ std::optional<u8> GameControllers::GetControllerIndexFromUserID(s32 user_id) {
|
|||||||
if (!u) {
|
if (!u) {
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
return u->controller_port - 1;
|
return u->player_index - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<u8> GameControllers::GetControllerIndexFromControllerID(s32 controller_id) {
|
std::optional<u8> GameControllers::GetControllerIndexFromControllerID(s32 controller_id) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user