mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-02 14:50:41 -07:00
Initial commit for GitHub migration based on spice2x-25-03-03
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#undef CINTERFACE
|
||||
|
||||
#include "avs/game.h"
|
||||
#include "sdvx_sub.h"
|
||||
#include "games/sdvx/sdvx.h"
|
||||
#include "hooks/graphics/graphics.h"
|
||||
|
||||
namespace overlay::windows {
|
||||
|
||||
SDVXSubScreen::SDVXSubScreen(SpiceOverlay *overlay) : GenericSubScreen(overlay) {
|
||||
this->title = "SDVX Sub Screen";
|
||||
|
||||
bool isValkyrieCabinetMode = avs::game::SPEC[0] == 'G' || avs::game::SPEC[0] == 'H';
|
||||
if (!isValkyrieCabinetMode) {
|
||||
this->disabled_message = "Valkyrie Model mode is not enabled!";
|
||||
} else if (GRAPHICS_WINDOWED) {
|
||||
if (GRAPHICS_PREVENT_SECONDARY_WINDOW) {
|
||||
this->disabled_message = "Subscreen has been disabled by the user (-sdvxnosub).";
|
||||
} else {
|
||||
this->disabled_message = "Overlay unavailable in windowed mode! Use the second window instead.";
|
||||
}
|
||||
}
|
||||
|
||||
const auto padding = ImGui::GetFrameHeight() / 2;
|
||||
|
||||
this->init_size = ImVec2(ImGui::GetIO().DisplaySize.x - (padding * 2), 0.f);
|
||||
this->init_size.y = (this->init_size.x * 9 / 16) + ImGui::GetFrameHeight();
|
||||
|
||||
this->init_pos = ImVec2(ImGui::GetIO().DisplaySize.x / 2 - this->init_size.x / 2, 0);
|
||||
switch (games::sdvx::OVERLAY_POS) {
|
||||
case games::sdvx::SDVX_OVERLAY_TOP:
|
||||
this->init_pos.y = padding;
|
||||
break;
|
||||
case games::sdvx::SDVX_OVERLAY_BOTTOM:
|
||||
this->init_pos.y = ImGui::GetIO().DisplaySize.y - this->init_size.y - padding;
|
||||
break;
|
||||
case games::sdvx::SDVX_OVERLAY_MIDDLE:
|
||||
default:
|
||||
this->init_pos.y = (ImGui::GetIO().DisplaySize.y / 2) - (this->init_size.y / 2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SDVXSubScreen::touch_transform(const ImVec2 xy_in, LONG *x_out, LONG *y_out) {
|
||||
if (!this->get_active()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// SDVX Valkyrie cab needs math to make things work
|
||||
// what the game expects from touch screen:
|
||||
// [1080, 0 1920, 1080]
|
||||
// [0, 0 0, 1920]
|
||||
|
||||
// actual cursor position given by x_in (on the overlay, normalized):
|
||||
// [0, 0 1, 0]
|
||||
// [0, 1 1, 1]
|
||||
|
||||
// Basically, the game operates on rotated coordinates, but on top of that,
|
||||
// it needs to be adjusted so they match up with the subscreen overlay.
|
||||
|
||||
// so the math is:
|
||||
// Xin(0, 1) => Yout(0, 1920)
|
||||
// Yin(0, 1) => Xout(1080, 0)
|
||||
|
||||
*x_out = ImGui::GetIO().DisplaySize.x * (1.f - xy_in.y);
|
||||
*y_out = ImGui::GetIO().DisplaySize.y * xy_in.x;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user