mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 08:22:32 +00:00
Custom Trophy images
This commit is contained in:
parent
15d10e47ea
commit
3d6b882aa1
@ -128,6 +128,7 @@ static auto UserPaths = [] {
|
|||||||
create_path(PathType::CheatsDir, user_dir / CHEATS_DIR);
|
create_path(PathType::CheatsDir, user_dir / CHEATS_DIR);
|
||||||
create_path(PathType::PatchesDir, user_dir / PATCHES_DIR);
|
create_path(PathType::PatchesDir, user_dir / PATCHES_DIR);
|
||||||
create_path(PathType::MetaDataDir, user_dir / METADATA_DIR);
|
create_path(PathType::MetaDataDir, user_dir / METADATA_DIR);
|
||||||
|
create_path(PathType::CustomTrophy, user_dir / CUSTOM_TROPHY);
|
||||||
|
|
||||||
return paths;
|
return paths;
|
||||||
}();
|
}();
|
||||||
|
@ -27,6 +27,7 @@ enum class PathType {
|
|||||||
CheatsDir, // Where cheats are stored.
|
CheatsDir, // Where cheats are stored.
|
||||||
PatchesDir, // Where patches are stored.
|
PatchesDir, // Where patches are stored.
|
||||||
MetaDataDir, // Where game metadata (e.g. trophies and menu backgrounds) is stored.
|
MetaDataDir, // Where game metadata (e.g. trophies and menu backgrounds) is stored.
|
||||||
|
CustomTrophy, // Where custom files for trophies are stored.
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr auto PORTABLE_DIR = "user";
|
constexpr auto PORTABLE_DIR = "user";
|
||||||
@ -44,6 +45,7 @@ constexpr auto CAPTURES_DIR = "captures";
|
|||||||
constexpr auto CHEATS_DIR = "cheats";
|
constexpr auto CHEATS_DIR = "cheats";
|
||||||
constexpr auto PATCHES_DIR = "patches";
|
constexpr auto PATCHES_DIR = "patches";
|
||||||
constexpr auto METADATA_DIR = "game_data";
|
constexpr auto METADATA_DIR = "game_data";
|
||||||
|
constexpr auto CUSTOM_TROPHY = "custom_trophy";
|
||||||
|
|
||||||
// Filenames
|
// Filenames
|
||||||
constexpr auto LOG_FILE = "shad_log.txt";
|
constexpr auto LOG_FILE = "shad_log.txt";
|
||||||
|
@ -2,9 +2,13 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <filesystem>
|
||||||
|
#include <fstream>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <cmrc/cmrc.hpp>
|
#include <cmrc/cmrc.hpp>
|
||||||
|
#include <common/path_util.h>
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
|
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/config.h"
|
#include "common/config.h"
|
||||||
#include "common/singleton.h"
|
#include "common/singleton.h"
|
||||||
@ -12,7 +16,7 @@
|
|||||||
#include "trophy_ui.h"
|
#include "trophy_ui.h"
|
||||||
|
|
||||||
CMRC_DECLARE(res);
|
CMRC_DECLARE(res);
|
||||||
|
namespace fs = std::filesystem;
|
||||||
using namespace ImGui;
|
using namespace ImGui;
|
||||||
namespace Libraries::NpTrophy {
|
namespace Libraries::NpTrophy {
|
||||||
|
|
||||||
@ -31,20 +35,46 @@ TrophyUI::TrophyUI(const std::filesystem::path& trophyIconPath, const std::strin
|
|||||||
fmt::UTF(trophyIconPath.u8string()));
|
fmt::UTF(trophyIconPath.u8string()));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string pathString;
|
std::string pathString = "src/images/";
|
||||||
|
|
||||||
if (trophy_type == "P") {
|
if (trophy_type == "P") {
|
||||||
pathString = "src/images/platinum.png";
|
pathString += "platinum.png";
|
||||||
} else if (trophy_type == "G") {
|
} else if (trophy_type == "G") {
|
||||||
pathString = "src/images/gold.png";
|
pathString += "gold.png";
|
||||||
} else if (trophy_type == "S") {
|
} else if (trophy_type == "S") {
|
||||||
pathString = "src/images/silver.png";
|
pathString += "silver.png";
|
||||||
} else if (trophy_type == "B") {
|
} else if (trophy_type == "B") {
|
||||||
pathString = "src/images/bronze.png";
|
pathString += "bronze.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto CustomTrophy_Dir = Common::FS::GetUserPath(Common::FS::PathType::CustomTrophy);
|
||||||
|
std::string customPath;
|
||||||
|
|
||||||
|
if (trophy_type == "P" && fs::exists(CustomTrophy_Dir / "platinum.png")) {
|
||||||
|
customPath = (CustomTrophy_Dir / "platinum.png").string();
|
||||||
|
} else if (trophy_type == "G" && fs::exists(CustomTrophy_Dir / "gold.png")) {
|
||||||
|
customPath = (CustomTrophy_Dir / "gold.png").string();
|
||||||
|
} else if (trophy_type == "S" && fs::exists(CustomTrophy_Dir / "silver.png")) {
|
||||||
|
customPath = (CustomTrophy_Dir / "silver.png").string();
|
||||||
|
} else if (trophy_type == "B" && fs::exists(CustomTrophy_Dir / "bronze.png")) {
|
||||||
|
customPath = (CustomTrophy_Dir / "bronze.png").string();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<u8> imgdata;
|
||||||
|
if (!customPath.empty()) {
|
||||||
|
std::ifstream file(customPath, std::ios::binary);
|
||||||
|
if (file) {
|
||||||
|
imgdata = std::vector<u8>(std::istreambuf_iterator<char>(file),
|
||||||
|
std::istreambuf_iterator<char>());
|
||||||
|
} else {
|
||||||
|
LOG_ERROR(Lib_NpTrophy, "Could not open custom file for trophy in {}", customPath);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
auto resource = cmrc::res::get_filesystem();
|
||||||
|
auto file = resource.open(pathString);
|
||||||
|
imgdata = std::vector<u8>(file.begin(), file.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
auto resource = cmrc::res::get_filesystem();
|
|
||||||
auto file = resource.open(pathString);
|
|
||||||
std::vector<u8> imgdata(file.begin(), file.end());
|
|
||||||
trophy_type_icon = RefCountedTexture::DecodePngTexture(imgdata);
|
trophy_type_icon = RefCountedTexture::DecodePngTexture(imgdata);
|
||||||
|
|
||||||
AddLayer(this);
|
AddLayer(this);
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <cmrc/cmrc.hpp>
|
#include <cmrc/cmrc.hpp>
|
||||||
#include "common/path_util.h"
|
#include "common/path_util.h"
|
||||||
#include "trophy_viewer.h"
|
#include "trophy_viewer.h"
|
||||||
|
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
CMRC_DECLARE(res);
|
CMRC_DECLARE(res);
|
||||||
|
|
||||||
TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindow() {
|
TrophyViewer::TrophyViewer(QString trophyPath, QString gameTrpPath) : QMainWindow() {
|
||||||
@ -122,10 +125,29 @@ void TrophyViewer::PopulateTrophyWidget(QString title) {
|
|||||||
const std::string filename = GetTrpType(trpType[row].at(0));
|
const std::string filename = GetTrpType(trpType[row].at(0));
|
||||||
QTableWidgetItem* typeitem = new QTableWidgetItem();
|
QTableWidgetItem* typeitem = new QTableWidgetItem();
|
||||||
|
|
||||||
auto resource = cmrc::res::get_filesystem();
|
const auto CustomTrophy_Dir =
|
||||||
std::string resourceString = "src/images/" + filename;
|
Common::FS::GetUserPath(Common::FS::PathType::CustomTrophy);
|
||||||
auto file = resource.open(resourceString);
|
std::string customPath;
|
||||||
std::vector<char> imgdata(file.begin(), file.end());
|
|
||||||
|
if (fs::exists(CustomTrophy_Dir / filename)) {
|
||||||
|
customPath = (CustomTrophy_Dir / filename).string();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<char> imgdata;
|
||||||
|
|
||||||
|
if (!customPath.empty()) {
|
||||||
|
std::ifstream file(customPath, std::ios::binary);
|
||||||
|
if (file) {
|
||||||
|
imgdata = std::vector<char>(std::istreambuf_iterator<char>(file),
|
||||||
|
std::istreambuf_iterator<char>());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
auto resource = cmrc::res::get_filesystem();
|
||||||
|
std::string resourceString = "src/images/" + filename;
|
||||||
|
auto file = resource.open(resourceString);
|
||||||
|
imgdata = std::vector<char>(file.begin(), file.end());
|
||||||
|
}
|
||||||
|
|
||||||
QImage type_icon = QImage::fromData(imgdata).scaled(QSize(64, 64), Qt::KeepAspectRatio,
|
QImage type_icon = QImage::fromData(imgdata).scaled(QSize(64, 64), Qt::KeepAspectRatio,
|
||||||
Qt::SmoothTransformation);
|
Qt::SmoothTransformation);
|
||||||
typeitem->setData(Qt::DecorationRole, type_icon);
|
typeitem->setData(Qt::DecorationRole, type_icon);
|
||||||
|
Loading…
Reference in New Issue
Block a user