Huge refactor: Make Core a singleton
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user