Wow the ROM Header was just completely busted. Game list view works now
This commit is contained in:
@@ -21,7 +21,7 @@ void KaizenGui::populateRomsList(const std::string &romsPath) {
|
||||
if (!file.is_regular_file())
|
||||
continue;
|
||||
|
||||
auto filename = file.path().lexically_normal().string();
|
||||
auto filename = file.path().string();
|
||||
|
||||
bool isPlain = std::ranges::any_of(std::array{".n64", ".z64", ".v64"},
|
||||
[&](const std::string &ext) { return file.path().extension() == ext; });
|
||||
@@ -36,9 +36,18 @@ void KaizenGui::populateRomsList(const std::string &romsPath) {
|
||||
auto rom = n64::Mem::LoadROM(isArchive, filename);
|
||||
auto regions = n64::GameDB::match(rom);
|
||||
|
||||
if (rom.gameNameDB.empty())
|
||||
rom.gameNameDB = fs::path(filename).stem();
|
||||
|
||||
romsListPaths.push_back(filename);
|
||||
romsList->insertRow(i);
|
||||
romsList->setItem(i, 0, new QTableWidgetItem(core.mem->rom.gameNameDB.c_str()));
|
||||
|
||||
romsList->setItem(
|
||||
i, 0,
|
||||
new QTableWidgetItem(std::format("{} ({}) (Rev {})", rom.gameNameDB,
|
||||
n64::GameDB::regionCodeToReadable(rom.header.countryCode),
|
||||
rom.header.version)
|
||||
.c_str()));
|
||||
romsList->setItem(i, 1, new QTableWidgetItem(regions.c_str()));
|
||||
romsList->setItem(i, 2, new QTableWidgetItem("Never"));
|
||||
romsList->setItem(i, 3, new QTableWidgetItem("0h 0m 0s"));
|
||||
@@ -51,6 +60,7 @@ void KaizenGui::populateRomsList(const std::string &romsPath) {
|
||||
KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::UserScope) {
|
||||
SDL_InitSubSystem(SDL_INIT_GAMEPAD);
|
||||
|
||||
SDL_AddGamepadMapping(gamecontrollerdb_str);
|
||||
hide();
|
||||
|
||||
romsList->verticalHeader()->hide();
|
||||
@@ -60,10 +70,10 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
|
||||
romsList->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
romsList->setSortingEnabled(true);
|
||||
romsList->setColumnCount(4);
|
||||
romsList->setHorizontalHeaderItem(0, romName);
|
||||
romsList->setHorizontalHeaderItem(1, romRegions);
|
||||
romsList->setHorizontalHeaderItem(2, romLastPlayed);
|
||||
romsList->setHorizontalHeaderItem(3, romTimePlayed);
|
||||
romsList->setHorizontalHeaderItem(0, new QTableWidgetItem("Name"));
|
||||
romsList->setHorizontalHeaderItem(1, new QTableWidgetItem("Regions"));
|
||||
romsList->setHorizontalHeaderItem(2, new QTableWidgetItem("Last played"));
|
||||
romsList->setHorizontalHeaderItem(3, new QTableWidgetItem("Time played"));
|
||||
|
||||
vulkanWidget = new RenderWidget();
|
||||
vulkanWidget->hide();
|
||||
@@ -105,9 +115,36 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
|
||||
|
||||
setAcceptDrops(true);
|
||||
|
||||
SDLeventsTimer = new QTimer();
|
||||
SDLeventsTimer->setInterval(1);
|
||||
statusBarTimer = new QTimer();
|
||||
statusBarTimer->setInterval(500);
|
||||
|
||||
connect(SDLeventsTimer, &QTimer::timeout, this, [&] {
|
||||
SDL_Event e;
|
||||
while (SDL_PollEvent(&e)) {
|
||||
if (e.type == SDL_EVENT_GAMEPAD_ADDED) {
|
||||
if (!gamepad) {
|
||||
const auto index = e.gdevice.which;
|
||||
|
||||
gamepad = SDL_OpenGamepad(index);
|
||||
warn("Found controller!");
|
||||
warn("Name: {}", SDL_GetGamepadName(gamepad));
|
||||
warn("Vendor: {}", SDL_GetGamepadVendor(gamepad));
|
||||
}
|
||||
}
|
||||
|
||||
if (e.type == SDL_EVENT_GAMEPAD_REMOVED) {
|
||||
if (gamepad) {
|
||||
SDL_CloseGamepad(gamepad);
|
||||
gamepad = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
SDLeventsTimer->start();
|
||||
|
||||
connect(statusBarTimer, &QTimer::timeout, this, [&] {
|
||||
pause->setText("Pause");
|
||||
fpsLabel->setText(std::format("FPS: {:.2f}", 1000.f / elapsed).c_str());
|
||||
@@ -234,6 +271,28 @@ KaizenGui::~KaizenGui() { cleanup(); }
|
||||
|
||||
void KaizenGui::updateKeys() {
|
||||
auto &pif = core.mem->mmio.si.pif;
|
||||
if (gamepad) {
|
||||
pif.UpdateButton(0, n64::Controller::Z,
|
||||
SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_LEFT_TRIGGER) == SDL_JOYSTICK_AXIS_MAX);
|
||||
pif.UpdateButton(0, n64::Controller::A, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_SOUTH));
|
||||
pif.UpdateButton(0, n64::Controller::B, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_WEST));
|
||||
pif.UpdateButton(0, n64::Controller::LT, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_LEFT_SHOULDER));
|
||||
pif.UpdateButton(0, n64::Controller::RT, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER));
|
||||
pif.UpdateButton(0, n64::Controller::Start, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_START));
|
||||
pif.UpdateButton(0, n64::Controller::DUp, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_UP));
|
||||
pif.UpdateButton(0, n64::Controller::DDown, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_DOWN));
|
||||
pif.UpdateButton(0, n64::Controller::DLeft, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_LEFT));
|
||||
pif.UpdateButton(0, n64::Controller::DRight, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_RIGHT));
|
||||
pif.UpdateButton(0, n64::Controller::CUp,
|
||||
SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTY) == SDL_JOYSTICK_AXIS_MIN);
|
||||
pif.UpdateButton(0, n64::Controller::CDown,
|
||||
SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTY) == SDL_JOYSTICK_AXIS_MAX);
|
||||
pif.UpdateButton(0, n64::Controller::CLeft,
|
||||
SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTX) == SDL_JOYSTICK_AXIS_MIN);
|
||||
pif.UpdateButton(0, n64::Controller::CRight,
|
||||
SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTX) == SDL_JOYSTICK_AXIS_MAX);
|
||||
return;
|
||||
}
|
||||
pif.UpdateButton(0, n64::Controller::Z, pressedKeys.test(0));
|
||||
pif.UpdateButton(0, n64::Controller::A, pressedKeys.test(1));
|
||||
pif.UpdateButton(0, n64::Controller::B, pressedKeys.test(2));
|
||||
@@ -251,8 +310,34 @@ void KaizenGui::updateKeys() {
|
||||
}
|
||||
|
||||
void KaizenGui::updateAxis() {
|
||||
s16 x = 0, y = 0;
|
||||
auto &pif = core.mem->mmio.si.pif;
|
||||
|
||||
if (gamepad) {
|
||||
float xclamped = SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_LEFTX);
|
||||
if (xclamped < 0) {
|
||||
xclamped /= static_cast<float>(std::abs(SDL_JOYSTICK_AXIS_MAX));
|
||||
} else {
|
||||
xclamped /= SDL_JOYSTICK_AXIS_MAX;
|
||||
}
|
||||
|
||||
xclamped *= 86;
|
||||
|
||||
float yclamped = SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_LEFTY);
|
||||
if (yclamped < 0) {
|
||||
yclamped /= static_cast<float>(std::abs(SDL_JOYSTICK_AXIS_MIN));
|
||||
} else {
|
||||
yclamped /= SDL_JOYSTICK_AXIS_MAX;
|
||||
}
|
||||
|
||||
yclamped *= 86;
|
||||
|
||||
pif.UpdateAxis(0, n64::Controller::Axis::Y, static_cast<s8>(-yclamped));
|
||||
pif.UpdateAxis(0, n64::Controller::Axis::X, static_cast<s8>(xclamped));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
s16 x = 0, y = 0;
|
||||
if (pressedKeys.test(14)) // up
|
||||
y += 86;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user