Files
kaizen/src/frontend/App.cpp
2023-10-30 09:37:09 +01:00

127 lines
3.7 KiB
C++

#include <App.hpp>
#include <nfd.hpp>
App::App() : window(core) {
DiscordEventHandlers handlers{};
Discord_Initialize("1049669178124148806", &handlers, 1, nullptr);
Util::UpdateRPC(Util::Idling);
}
void App::Run() {
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
n64::SI& si = core.cpu->mem.mmio.si;
while (!window.done) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
ImGui_ImplSDL2_ProcessEvent(&event);
switch(event.type) {
case SDL_QUIT:
window.done = true;
break;
case SDL_WINDOWEVENT:
window.handleEvents(event, core);
break;
case SDL_CONTROLLERDEVICEADDED: {
const int index = event.cdevice.which;
si.pif.gamepad = SDL_GameControllerOpen(index);
si.pif.gamepadConnected = false;
if (!si.pif.gamepad) {
Util::warn("[WARN]: Could not initialize gamepad: {}", SDL_GetError());
} else {
si.pif.gamepadConnected = true;
}
} break;
case SDL_CONTROLLERDEVICEREMOVED:
SDL_GameControllerClose(si.pif.gamepad);
si.pif.gamepadConnected = false;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_o: {
OpenROMDialog(window, core);
} break;
case SDLK_F1: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 0;
}
} break;
case SDLK_F2: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 1;
}
} break;
case SDLK_F3: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 2;
}
} break;
case SDLK_F4: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 3;
}
} break;
case SDLK_F5: {
if(core.romLoaded) {
if(event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 4;
} else {
core.Deserialize();
}
}
} break;
case SDLK_F6: {
if(core.romLoaded) {
if(event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 5;
} else {
core.Serialize();
}
}
} break;
case SDLK_F7: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 6;
}
} break;
case SDLK_F8: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 7;
}
} break;
case SDLK_F9: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 8;
}
} break;
case SDLK_F10: {
if(core.romLoaded && event.key.keysym.mod == KMOD_SHIFT) {
core.slot = 9;
}
} break;
}
break;
case SDL_DROPFILE: {
char *droppedDir = event.drop.file;
if (droppedDir) {
window.LoadROM(core, droppedDir);
SDL_free(droppedDir);
}
} break;
}
}
if(core.romLoaded) {
if(!core.pause) {
core.Run(window.settings.GetVolumeL(), window.settings.GetVolumeR());
}
if(core.render) {
UpdateScreenParallelRdp(core, window, core.GetVI());
}
} else {
if(core.render) {
UpdateScreenParallelRdpNoGame(core, window);
}
}
}
}