Huge refactor: Make Core a singleton

This commit is contained in:
irisz64
2025-07-29 11:08:05 +02:00
parent e0e887ce90
commit 3061334004
56 changed files with 426 additions and 594 deletions

View File

@@ -4,8 +4,8 @@
#include <ImGuiImpl/StatusBar.hpp>
#include <resources/gamecontrollerdb.h>
KaizenGui::KaizenGui() noexcept : window("Kaizen", 800, 600), settingsWindow(window), core(std::make_shared<n64::Core>(static_cast<n64::Core::CPUType>(settingsWindow.cpuSettings.GetCPUType()))), vulkanWidget(core, window.getHandle()), emuThread(core, fpsCounter, vulkanWidget, settingsWindow), debugger(core) {
gui::Initialize(core->parallel.wsi, window.getHandle());
KaizenGui::KaizenGui() noexcept : window("Kaizen", 800, 600), settingsWindow(window), vulkanWidget(window.getHandle()), emuThread(fpsCounter, vulkanWidget, settingsWindow) {
gui::Initialize(n64::Core::GetInstance().parallel.wsi, window.getHandle());
SDL_InitSubSystem(SDL_INIT_GAMEPAD);
SDL_AddGamepadMapping(gamecontrollerdb_str);
@@ -34,7 +34,8 @@ void KaizenGui::QueryDevices(SDL_Event event) {
}
void KaizenGui::HandleInput(SDL_Event event) {
n64::PIF &pif = core->cpu->GetMem().mmio.si.pif;
n64::Core& core = n64::Core::GetInstance();
n64::PIF &pif = core.cpu->GetMem().mmio.si.pif;
switch(event.type) {
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
if(!gamepad)
@@ -95,9 +96,9 @@ void KaizenGui::HandleInput(SDL_Event event) {
fastForward = keys[SDL_SCANCODE_SPACE];
if(!unlockFramerate)
core->parallel.SetFramerateUnlocked(fastForward);
core.parallel.SetFramerateUnlocked(fastForward);
if(core->romLoaded) {
if(core.romLoaded) {
if(keys[SDL_SCANCODE_P]) {
emuThread.TogglePause();
}
@@ -134,6 +135,7 @@ void KaizenGui::HandleInput(SDL_Event event) {
}
void KaizenGui::RenderUI() {
n64::Core& core = n64::Core::GetInstance();
gui::StartFrame();
if(ImGui::BeginMainMenuBar()) {
@@ -148,9 +150,9 @@ void KaizenGui::RenderUI() {
ImGui::EndMenu();
}
if(ImGui::BeginMenu("Emulation")) {
ImGui::BeginDisabled(!core->romLoaded);
ImGui::BeginDisabled(!core.romLoaded);
if(ImGui::MenuItem(core->pause ? "Resume" : "Pause", "P")) {
if(ImGui::MenuItem(core.pause ? "Resume" : "Pause", "P")) {
emuThread.TogglePause();
}
@@ -160,11 +162,11 @@ void KaizenGui::RenderUI() {
if(ImGui::MenuItem("Stop", "Q")) {
emuThread.Stop();
core->romLoaded = false;
core.romLoaded = false;
}
if(ImGui::Checkbox("Unlock framerate", &unlockFramerate)) {
core->parallel.SetFramerateUnlocked(unlockFramerate);
core.parallel.SetFramerateUnlocked(unlockFramerate);
}
if(ImGui::MenuItem("Open Debugger")) {
@@ -245,17 +247,18 @@ void KaizenGui::RenderUI() {
}, this, window.getHandle(), filters, 3, nullptr, false);
}
if(core->romLoaded) {
core->parallel.UpdateScreen(*core.get());
if(core.romLoaded) {
core.parallel.UpdateScreen();
return;
}
core->parallel.UpdateScreen(*core.get(), false);
core.parallel.UpdateScreen(false);
}
void KaizenGui::LoadROM(const std::string &path) noexcept {
emuThread.core->LoadROM(path);
const auto gameNameDB = emuThread.core->cpu->GetMem().rom.gameNameDB;
n64::Core& core = n64::Core::GetInstance();
core.LoadROM(path);
const auto gameNameDB = core.cpu->GetMem().rom.gameNameDB;
}
void KaizenGui::run() {
@@ -279,8 +282,9 @@ void KaizenGui::run() {
}
void KaizenGui::LoadTAS(const std::string &path) const noexcept {
if (emuThread.core->LoadTAS(fs::path(path))) {
const auto gameNameDB = emuThread.core->cpu->GetMem().rom.gameNameDB;
n64::Core& core = n64::Core::GetInstance();
if (core.LoadTAS(fs::path(path))) {
const auto gameNameDB = core.cpu->GetMem().rom.gameNameDB;
const auto movieName = fs::path(path).stem().string();
return;
}