gamepad works now finally. Ready for merge in dev
This commit is contained in:
1
external/parallel-rdp/ParallelRDPWrapper.hpp
vendored
1
external/parallel-rdp/ParallelRDPWrapper.hpp
vendored
@@ -21,7 +21,6 @@ public:
|
|||||||
|
|
||||||
void Init(const std::shared_ptr<Vulkan::WSIPlatform> &,
|
void Init(const std::shared_ptr<Vulkan::WSIPlatform> &,
|
||||||
const std::shared_ptr<WindowInfo> &, const u8 *);
|
const std::shared_ptr<WindowInfo> &, const u8 *);
|
||||||
ParallelRDP() = default;
|
|
||||||
|
|
||||||
void UpdateScreen(n64::Core &, bool = true) const;
|
void UpdateScreen(n64::Core &, bool = true) const;
|
||||||
void EnqueueCommand(int, const u32 *) const;
|
void EnqueueCommand(int, const u32 *) const;
|
||||||
|
|||||||
@@ -37,8 +37,8 @@
|
|||||||
#define CART_REGION_END_2_1 0x05FFFFFF
|
#define CART_REGION_END_2_1 0x05FFFFFF
|
||||||
#define CART_REGION_END_2_2 0x0FFFFFFF
|
#define CART_REGION_END_2_2 0x0FFFFFFF
|
||||||
|
|
||||||
#define RDRAM_REGION RDRAM_REGION_START... RDRAM_REGION_END
|
#define RDRAM_REGION RDRAM_REGION_START ... RDRAM_REGION_END
|
||||||
#define RSP_MEM_REGION DMEM_REGION_START... 0x0403FFFF
|
#define RSP_MEM_REGION DMEM_REGION_START ... 0x0403FFFF
|
||||||
#define MMIO_REGION 0x04040000 ... 0x041FFFFF : case 0x04300000 ... 0x048FFFFF
|
#define MMIO_REGION 0x04040000 ... 0x041FFFFF : case 0x04300000 ... 0x048FFFFF
|
||||||
#define SP_REGION 0x04040000 ... 0x040FFFFF
|
#define SP_REGION 0x04040000 ... 0x040FFFFF
|
||||||
#define DP_CMD_REGION 0x04100000 ... 0x041FFFFF
|
#define DP_CMD_REGION 0x04100000 ... 0x041FFFFF
|
||||||
@@ -51,9 +51,9 @@
|
|||||||
#define PI_REGION 0x04600000 ... 0x046FFFFF
|
#define PI_REGION 0x04600000 ... 0x046FFFFF
|
||||||
#define RI_REGION 0x04700000 ... 0x047FFFFF
|
#define RI_REGION 0x04700000 ... 0x047FFFFF
|
||||||
#define SI_REGION 0x04800000 ... 0x048FFFFF
|
#define SI_REGION 0x04800000 ... 0x048FFFFF
|
||||||
#define REGION_CART CART_REGION_START_2_1... CART_REGION_END_1_2
|
#define REGION_CART CART_REGION_START_2_1 ... CART_REGION_END_1_2
|
||||||
#define PIF_ROM_REGION PIF_ROM_REGION_START... PIF_ROM_REGION_END
|
#define PIF_ROM_REGION PIF_ROM_REGION_START ... PIF_ROM_REGION_END
|
||||||
#define PIF_RAM_REGION PIF_RAM_REGION_START... PIF_RAM_REGION_END
|
#define PIF_RAM_REGION PIF_RAM_REGION_START ... PIF_RAM_REGION_END
|
||||||
|
|
||||||
#define START_VREGION_KUSEG 0x00000000
|
#define START_VREGION_KUSEG 0x00000000
|
||||||
#define START_VREGION_KSEG0 0x80000000
|
#define START_VREGION_KSEG0 0x80000000
|
||||||
@@ -67,11 +67,11 @@
|
|||||||
#define END_VREGION_KSSEG 0xDFFFFFFF
|
#define END_VREGION_KSSEG 0xDFFFFFFF
|
||||||
#define END_VREGION_KSEG3 0xFFFFFFFF
|
#define END_VREGION_KSEG3 0xFFFFFFFF
|
||||||
|
|
||||||
#define VREGION_KUSEG START_VREGION_KUSEG... END_VREGION_KUSEG
|
#define VREGION_KUSEG START_VREGION_KUSEG ... END_VREGION_KUSEG
|
||||||
#define VREGION_KSEG0 START_VREGION_KSEG0... END_VREGION_KSEG0
|
#define VREGION_KSEG0 START_VREGION_KSEG0 ... END_VREGION_KSEG0
|
||||||
#define VREGION_KSEG1 START_VREGION_KSEG1... END_VREGION_KSEG1
|
#define VREGION_KSEG1 START_VREGION_KSEG1 ... END_VREGION_KSEG1
|
||||||
#define VREGION_KSSEG START_VREGION_KSSEG... END_VREGION_KSSEG
|
#define VREGION_KSSEG START_VREGION_KSSEG ... END_VREGION_KSSEG
|
||||||
#define VREGION_KSEG3 START_VREGION_KSEG3... END_VREGION_KSEG3
|
#define VREGION_KSEG3 START_VREGION_KSEG3 ... END_VREGION_KSEG3
|
||||||
|
|
||||||
#define DIRECT_MAP_MASK 0x1FFFFFFF
|
#define DIRECT_MAP_MASK 0x1FFFFFFF
|
||||||
|
|
||||||
@@ -99,17 +99,17 @@
|
|||||||
#define EREGION_PI_SRAM 0x0FFFFFFF
|
#define EREGION_PI_SRAM 0x0FFFFFFF
|
||||||
#define EREGION_PI_ROM 0xFFFFFFFF
|
#define EREGION_PI_ROM 0xFFFFFFFF
|
||||||
|
|
||||||
#define REGION_PI_UNKNOWN SREGION_PI_UNKNOWN... EREGION_PI_UNKNOWN
|
#define REGION_PI_UNKNOWN SREGION_PI_UNKNOWN ... EREGION_PI_UNKNOWN
|
||||||
#define REGION_PI_64DD_REG SREGION_PI_64DD_REG... EREGION_PI_64DD_REG
|
#define REGION_PI_64DD_REG SREGION_PI_64DD_REG ... EREGION_PI_64DD_REG
|
||||||
#define REGION_PI_64DD_ROM SREGION_PI_64DD_ROM... EREGION_PI_64DD_ROM
|
#define REGION_PI_64DD_ROM SREGION_PI_64DD_ROM ... EREGION_PI_64DD_ROM
|
||||||
#define REGION_PI_SRAM SREGION_PI_SRAM... EREGION_PI_SRAM
|
#define REGION_PI_SRAM SREGION_PI_SRAM ... EREGION_PI_SRAM
|
||||||
#define REGION_PI_ROM SREGION_PI_ROM... EREGION_PI_ROM
|
#define REGION_PI_ROM SREGION_PI_ROM ... EREGION_PI_ROM
|
||||||
|
|
||||||
#define CART_ISVIEWER_FLUSH 0x13FF0014
|
#define CART_ISVIEWER_FLUSH 0x13FF0014
|
||||||
#define SREGION_CART_ISVIEWER_BUFFER 0x13FF0020
|
#define SREGION_CART_ISVIEWER_BUFFER 0x13FF0020
|
||||||
#define EREGION_CART_ISVIEWER_BUFFER 0x13FFFFFF
|
#define EREGION_CART_ISVIEWER_BUFFER 0x13FFFFFF
|
||||||
#define CART_ISVIEWER_SIZE (EREGION_CART_ISVIEWER_BUFFER - SREGION_CART_ISVIEWER_BUFFER)
|
#define CART_ISVIEWER_SIZE (EREGION_CART_ISVIEWER_BUFFER - SREGION_CART_ISVIEWER_BUFFER)
|
||||||
#define REGION_CART_ISVIEWER_BUFFER SREGION_CART_ISVIEWER_BUFFER... EREGION_CART_ISVIEWER_BUFFER
|
#define REGION_CART_ISVIEWER_BUFFER SREGION_CART_ISVIEWER_BUFFER ... EREGION_CART_ISVIEWER_BUFFER
|
||||||
|
|
||||||
constexpr u64 operator""_kb(unsigned long long int x) { return 1024ULL * x; }
|
constexpr u64 operator""_kb(unsigned long long int x) { return 1024ULL * x; }
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,6 @@ namespace n64 {
|
|||||||
#define SYSTEM_SAMPLE_SIZE 4
|
#define SYSTEM_SAMPLE_SIZE 4
|
||||||
#define BYTES_PER_HALF_SECOND (((float)AUDIO_SAMPLE_RATE / 2) * SYSTEM_SAMPLE_SIZE)
|
#define BYTES_PER_HALF_SECOND (((float)AUDIO_SAMPLE_RATE / 2) * SYSTEM_SAMPLE_SIZE)
|
||||||
|
|
||||||
AudioDevice::~AudioDevice() {
|
|
||||||
LockMutex();
|
|
||||||
SDL_DestroyAudioStream(GetStream());
|
|
||||||
UnlockMutex();
|
|
||||||
SDL_DestroyMutex(audioStreamMutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioDevice::AudioDevice() {
|
AudioDevice::AudioDevice() {
|
||||||
audioStreamMutex = SDL_CreateMutex();
|
audioStreamMutex = SDL_CreateMutex();
|
||||||
if (!audioStreamMutex) {
|
if (!audioStreamMutex) {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
namespace n64 {
|
namespace n64 {
|
||||||
struct AudioDevice {
|
struct AudioDevice {
|
||||||
AudioDevice();
|
AudioDevice();
|
||||||
~AudioDevice();
|
|
||||||
|
|
||||||
void Reset() { running = false; }
|
void Reset() { running = false; }
|
||||||
|
|
||||||
|
|||||||
@@ -5,15 +5,11 @@
|
|||||||
#include <ImGuiImpl/GUI.hpp>
|
#include <ImGuiImpl/GUI.hpp>
|
||||||
#include <resources/gamecontrollerdb.h>
|
#include <resources/gamecontrollerdb.h>
|
||||||
|
|
||||||
bool HandleInput(void *userdata, SDL_Event *event);
|
|
||||||
bool QueryDevices(void *userdata, SDL_Event *event);
|
|
||||||
|
|
||||||
KaizenGui::KaizenGui() noexcept : window("Kaizen", 800, 600), core(std::make_shared<n64::Core>()), vulkanWidget(core, window.getHandle()), emuThread(core, fpsCounter, vulkanWidget, settingsWindow) {
|
KaizenGui::KaizenGui() noexcept : window("Kaizen", 800, 600), core(std::make_shared<n64::Core>()), vulkanWidget(core, window.getHandle()), emuThread(core, fpsCounter, vulkanWidget, settingsWindow) {
|
||||||
gui::Initialize(core->parallel.wsi, window.getHandle());
|
gui::Initialize(core->parallel.wsi, window.getHandle());
|
||||||
|
SDL_InitSubSystem(SDL_INIT_GAMEPAD);
|
||||||
|
|
||||||
SDL_AddGamepadMapping(gamecontrollerdb_str);
|
SDL_AddGamepadMapping(gamecontrollerdb_str);
|
||||||
SDL_AddEventWatch(HandleInput, this);
|
|
||||||
SDL_AddEventWatch(QueryDevices, this);
|
|
||||||
|
|
||||||
actionPause.setFunc([&]() {
|
actionPause.setFunc([&]() {
|
||||||
if(ImGui::IsItemClicked()) {
|
if(ImGui::IsItemClicked()) {
|
||||||
@@ -43,8 +39,11 @@ KaizenGui::KaizenGui() noexcept : window("Kaizen", 800, 600), core(std::make_sha
|
|||||||
});
|
});
|
||||||
|
|
||||||
statusBar.setFunc([&]() {
|
statusBar.setFunc([&]() {
|
||||||
|
/* TODO: for when I'll separate the GUI and the Core in two threads again
|
||||||
ImGui::Text("GUI FPS: %.2f, Emulation FPS: %s", ImGui::GetIO().Framerate,
|
ImGui::Text("GUI FPS: %.2f, Emulation FPS: %s", ImGui::GetIO().Framerate,
|
||||||
fmt::format(fpsCounter > 0 ? fmt::runtime("{0:.2f}") : fmt::runtime("{1}"), fpsCounter, "Not playing").c_str());
|
fmt::format(fpsCounter > 0 ? fmt::runtime("{0:.2f}") : fmt::runtime("{1}"), fpsCounter, "Not playing").c_str());
|
||||||
|
*/
|
||||||
|
ImGui::Text("FPS: %.2f", ImGui::GetIO().Framerate);
|
||||||
});
|
});
|
||||||
|
|
||||||
menuBar.addMenu({"File",
|
menuBar.addMenu({"File",
|
||||||
@@ -91,51 +90,40 @@ KaizenGui::KaizenGui() noexcept : window("Kaizen", 800, 600), core(std::make_sha
|
|||||||
|
|
||||||
KaizenGui::~KaizenGui() {
|
KaizenGui::~KaizenGui() {
|
||||||
gui::Cleanup();
|
gui::Cleanup();
|
||||||
SDL_RemoveEventWatch(HandleInput, this);
|
|
||||||
SDL_RemoveEventWatch(QueryDevices, this);
|
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QueryDevices(void *userdata, SDL_Event *event) {
|
void KaizenGui::QueryDevices(SDL_Event event) {
|
||||||
auto _this = (KaizenGui*)userdata;
|
switch (event.type) {
|
||||||
switch (event->type) {
|
|
||||||
case SDL_EVENT_GAMEPAD_ADDED:
|
case SDL_EVENT_GAMEPAD_ADDED:
|
||||||
{
|
{
|
||||||
const auto index = event->gdevice.which;
|
const auto index = event.gdevice.which;
|
||||||
|
|
||||||
auto gamepad = SDL_OpenGamepad(index);
|
gamepad = SDL_OpenGamepad(index);
|
||||||
Util::info("Found controller!");
|
Util::info("Found controller!");
|
||||||
const auto serial = SDL_GetGamepadSerial(gamepad);
|
|
||||||
const auto name = SDL_GetGamepadName(gamepad);
|
|
||||||
const auto path = SDL_GetGamepadPath(gamepad);
|
|
||||||
|
|
||||||
_this->gamepad = gamepad;
|
|
||||||
}
|
}
|
||||||
return true;
|
break;
|
||||||
case SDL_EVENT_GAMEPAD_REMOVED:
|
case SDL_EVENT_GAMEPAD_REMOVED:
|
||||||
SDL_CloseGamepad(_this->gamepad);
|
SDL_CloseGamepad(gamepad);
|
||||||
return true;
|
break;
|
||||||
default:
|
default: break;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HandleInput(void *userdata, SDL_Event *event) {
|
void KaizenGui::HandleInput(SDL_Event event) {
|
||||||
auto _this = (KaizenGui*)userdata;
|
n64::PIF &pif = core->cpu->GetMem().mmio.si.pif;
|
||||||
n64::PIF &pif = _this->core->cpu->GetMem().mmio.si.pif;
|
switch(event.type) {
|
||||||
switch(event->type) {
|
|
||||||
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
case SDL_EVENT_GAMEPAD_AXIS_MOTION:
|
||||||
if(!_this->gamepad)
|
if(!gamepad)
|
||||||
return false;
|
break;
|
||||||
{
|
{
|
||||||
_this->core->pause = true;
|
pif.UpdateButton(0, n64::Controller::Key::Z, SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_LEFT_TRIGGER) == SDL_JOYSTICK_AXIS_MAX);
|
||||||
pif.UpdateButton(0, n64::Controller::Key::Z, SDL_GetGamepadAxis(_this->gamepad, SDL_GAMEPAD_AXIS_LEFT_TRIGGER) == SDL_JOYSTICK_AXIS_MAX);
|
pif.UpdateButton(0, n64::Controller::Key::CUp, SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTY) <= -127);
|
||||||
pif.UpdateButton(0, n64::Controller::Key::CUp, SDL_GetGamepadAxis(_this->gamepad, SDL_GAMEPAD_AXIS_RIGHTY) <= -127);
|
pif.UpdateButton(0, n64::Controller::Key::CDown, SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTY) >= 127);
|
||||||
pif.UpdateButton(0, n64::Controller::Key::CDown, SDL_GetGamepadAxis(_this->gamepad, SDL_GAMEPAD_AXIS_RIGHTY) >= 127);
|
pif.UpdateButton(0, n64::Controller::Key::CLeft, SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTX) <= -127);
|
||||||
pif.UpdateButton(0, n64::Controller::Key::CLeft, SDL_GetGamepadAxis(_this->gamepad, SDL_GAMEPAD_AXIS_RIGHTX) <= -127);
|
pif.UpdateButton(0, n64::Controller::Key::CRight, SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_RIGHTX) >= 127);
|
||||||
pif.UpdateButton(0, n64::Controller::Key::CRight, SDL_GetGamepadAxis(_this->gamepad, SDL_GAMEPAD_AXIS_RIGHTX) >= 127);
|
|
||||||
|
|
||||||
float xclamped = SDL_GetGamepadAxis(_this->gamepad, SDL_GAMEPAD_AXIS_LEFTX);
|
float xclamped = SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_LEFTX);
|
||||||
if (xclamped < 0) {
|
if (xclamped < 0) {
|
||||||
xclamped /= float(std::abs(SDL_JOYSTICK_AXIS_MAX));
|
xclamped /= float(std::abs(SDL_JOYSTICK_AXIS_MAX));
|
||||||
} else {
|
} else {
|
||||||
@@ -144,7 +132,7 @@ bool HandleInput(void *userdata, SDL_Event *event) {
|
|||||||
|
|
||||||
xclamped *= 86;
|
xclamped *= 86;
|
||||||
|
|
||||||
float yclamped = SDL_GetGamepadAxis(_this->gamepad, SDL_GAMEPAD_AXIS_LEFTY);
|
float yclamped = SDL_GetGamepadAxis(gamepad, SDL_GAMEPAD_AXIS_LEFTY);
|
||||||
if (yclamped < 0) {
|
if (yclamped < 0) {
|
||||||
yclamped /= float(std::abs(SDL_JOYSTICK_AXIS_MIN));
|
yclamped /= float(std::abs(SDL_JOYSTICK_AXIS_MIN));
|
||||||
} else {
|
} else {
|
||||||
@@ -155,32 +143,28 @@ bool HandleInput(void *userdata, SDL_Event *event) {
|
|||||||
|
|
||||||
pif.UpdateAxis(0, n64::Controller::Axis::Y, -yclamped);
|
pif.UpdateAxis(0, n64::Controller::Axis::Y, -yclamped);
|
||||||
pif.UpdateAxis(0, n64::Controller::Axis::X, xclamped);
|
pif.UpdateAxis(0, n64::Controller::Axis::X, xclamped);
|
||||||
_this->core->pause = false;
|
|
||||||
}
|
}
|
||||||
return true;
|
break;
|
||||||
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
case SDL_EVENT_GAMEPAD_BUTTON_DOWN:
|
||||||
if(!_this->gamepad)
|
case SDL_EVENT_GAMEPAD_BUTTON_UP:
|
||||||
return false;
|
if(!gamepad)
|
||||||
{
|
break;
|
||||||
_this->core->pause = true;
|
|
||||||
pif.UpdateButton(0, n64::Controller::Key::A, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_SOUTH));
|
pif.UpdateButton(0, n64::Controller::Key::A, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_SOUTH));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::B, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_WEST));
|
pif.UpdateButton(0, n64::Controller::Key::B, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_WEST));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::Start, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_START));
|
pif.UpdateButton(0, n64::Controller::Key::Start, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_START));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::DUp, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_DPAD_UP));
|
pif.UpdateButton(0, n64::Controller::Key::DUp, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_UP));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::DDown, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_DPAD_DOWN));
|
pif.UpdateButton(0, n64::Controller::Key::DDown, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_DOWN));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::DLeft, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_DPAD_LEFT));
|
pif.UpdateButton(0, n64::Controller::Key::DLeft, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_LEFT));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::DRight, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_DPAD_RIGHT));
|
pif.UpdateButton(0, n64::Controller::Key::DRight, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_DPAD_RIGHT));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::LT, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_LEFT_SHOULDER));
|
pif.UpdateButton(0, n64::Controller::Key::LT, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_LEFT_SHOULDER));
|
||||||
pif.UpdateButton(0, n64::Controller::Key::RT, SDL_GetGamepadButton(_this->gamepad, SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER));
|
pif.UpdateButton(0, n64::Controller::Key::RT, SDL_GetGamepadButton(gamepad, SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER));
|
||||||
_this->core->pause = false;
|
break;
|
||||||
}
|
|
||||||
return true;
|
|
||||||
case SDL_EVENT_KEY_DOWN:
|
case SDL_EVENT_KEY_DOWN:
|
||||||
case SDL_EVENT_KEY_UP:
|
case SDL_EVENT_KEY_UP:
|
||||||
if(_this->gamepad)
|
if(gamepad)
|
||||||
return false;
|
break;
|
||||||
{
|
{
|
||||||
_this->core->pause = true;
|
|
||||||
auto keys = SDL_GetKeyboardState(nullptr);
|
auto keys = SDL_GetKeyboardState(nullptr);
|
||||||
pif.UpdateButton(0, n64::Controller::Key::Z, keys[SDL_SCANCODE_Z]);
|
pif.UpdateButton(0, n64::Controller::Key::Z, keys[SDL_SCANCODE_Z]);
|
||||||
pif.UpdateButton(0, n64::Controller::Key::CUp, keys[SDL_SCANCODE_HOME]);
|
pif.UpdateButton(0, n64::Controller::Key::CUp, keys[SDL_SCANCODE_HOME]);
|
||||||
@@ -198,10 +182,9 @@ bool HandleInput(void *userdata, SDL_Event *event) {
|
|||||||
pif.UpdateButton(0, n64::Controller::Key::RT, keys[SDL_SCANCODE_S]);
|
pif.UpdateButton(0, n64::Controller::Key::RT, keys[SDL_SCANCODE_S]);
|
||||||
pif.UpdateAxis(0, n64::Controller::Axis::Y, keys[SDL_SCANCODE_UP] ? 86 : keys[SDL_SCANCODE_DOWN] ? -86 : 0);
|
pif.UpdateAxis(0, n64::Controller::Axis::Y, keys[SDL_SCANCODE_UP] ? 86 : keys[SDL_SCANCODE_DOWN] ? -86 : 0);
|
||||||
pif.UpdateAxis(0, n64::Controller::Axis::X, keys[SDL_SCANCODE_LEFT] ? -86 : keys[SDL_SCANCODE_RIGHT] ? 86 : 0);
|
pif.UpdateAxis(0, n64::Controller::Axis::X, keys[SDL_SCANCODE_LEFT] ? -86 : keys[SDL_SCANCODE_RIGHT] ? 86 : 0);
|
||||||
_this->core->pause = false;
|
|
||||||
}
|
}
|
||||||
return true;
|
break;
|
||||||
default: return false;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +200,7 @@ void KaizenGui::RenderUI() {
|
|||||||
ImGui::RenderPlatformWindowsDefault();
|
ImGui::RenderPlatformWindowsDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!core->pause) {
|
if(!core->pause && core->romLoaded) {
|
||||||
core->parallel.UpdateScreen(*core.get());
|
core->parallel.UpdateScreen(*core.get());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -245,6 +228,8 @@ void KaizenGui::run() {
|
|||||||
emuThread.Stop();
|
emuThread.Stop();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
QueryDevices(e);
|
||||||
|
HandleInput(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
emuThread.run();
|
emuThread.run();
|
||||||
|
|||||||
@@ -13,15 +13,19 @@ class KaizenGui final {
|
|||||||
public:
|
public:
|
||||||
explicit KaizenGui() noexcept;
|
explicit KaizenGui() noexcept;
|
||||||
~KaizenGui();
|
~KaizenGui();
|
||||||
|
|
||||||
double fpsCounter = -1.0;
|
double fpsCounter = -1.0;
|
||||||
|
|
||||||
gui::MenuBar<true> menuBar;
|
gui::MenuBar<true> menuBar;
|
||||||
gui::MenuItem actionPause{"Pause", nullptr, false}, actionStop{"Stop", nullptr, false}, actionReset{"Reset", nullptr, false};
|
gui::MenuItem actionPause{"Pause", nullptr, false}, actionStop{"Stop", nullptr, false}, actionReset{"Reset", nullptr, false};
|
||||||
SettingsWindow settingsWindow;
|
|
||||||
std::shared_ptr<n64::Core> core;
|
|
||||||
RenderWidget vulkanWidget;
|
|
||||||
EmuThread emuThread;
|
|
||||||
gui::PopupWindow about{"About Kaizen"};
|
gui::PopupWindow about{"About Kaizen"};
|
||||||
gui::StatusBar statusBar{};
|
gui::StatusBar statusBar{};
|
||||||
|
|
||||||
|
std::shared_ptr<n64::Core> core;
|
||||||
|
RenderWidget vulkanWidget;
|
||||||
|
SettingsWindow settingsWindow;
|
||||||
|
EmuThread emuThread;
|
||||||
|
|
||||||
SDL_Gamepad* gamepad = nullptr;
|
SDL_Gamepad* gamepad = nullptr;
|
||||||
|
|
||||||
void run();
|
void run();
|
||||||
@@ -31,4 +35,6 @@ private:
|
|||||||
bool quit = false;
|
bool quit = false;
|
||||||
std::function<void()> emuExitFunc;
|
std::function<void()> emuExitFunc;
|
||||||
void RenderUI();
|
void RenderUI();
|
||||||
|
void HandleInput(SDL_Event event);
|
||||||
|
void QueryDevices(SDL_Event event);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user