#undef CINTERFACE #include "iidx_sub.h" #include "cfg/screen_resize.h" #include "games/iidx/iidx.h" #include "hooks/graphics/graphics.h" #include "touch/touch.h" namespace overlay::windows { IIDXSubScreen::IIDXSubScreen(SpiceOverlay *overlay) : GenericSubScreen(overlay) { this->title = "IIDX TDJ Subscreen"; if (GRAPHICS_IIDX_WSUB) { this->disabled_message = "Close this overlay and use the second window. (try ALT+TAB)"; } else if (games::iidx::IIDX_TDJ_MONITOR_WARNING) { this->disabled_message = "TDJ mode subscreen overlay is not compatible with -dxmainadapter option; use -mainmonitor instead"; } else if (games::iidx::NATIVE_TOUCH) { this->disabled_message = "Overlay disabled by user (-iidxnativetouch option is on, used for real touch screens)"; } float size = 0.5f; if (games::iidx::SUBSCREEN_OVERLAY_SIZE.has_value()) { if (games::iidx::SUBSCREEN_OVERLAY_SIZE.value() == "large") { size = 0.8f; } else if (games::iidx::SUBSCREEN_OVERLAY_SIZE.value() == "small") { size = 0.3f; } else if (games::iidx::SUBSCREEN_OVERLAY_SIZE.value() == "fullscreen") { GENERIC_SUB_WINDOW_FULLSIZE = true; this->draws_window = false; } } this->init_size = ImVec2( ImGui::GetIO().DisplaySize.x * size, (ImGui::GetIO().DisplaySize.x * size * 9 / 16) + ImGui::GetFrameHeight()); this->size_max = ImVec2( ImGui::GetIO().DisplaySize.x - ImGui::GetFrameHeight() * 2, ImGui::GetIO().DisplaySize.y - ImGui::GetFrameHeight() * 2); // middle / bottom this->init_pos = ImVec2( ImGui::GetIO().DisplaySize.x / 2 - this->init_size.x / 2, ImGui::GetIO().DisplaySize.y - this->init_size.y - (ImGui::GetFrameHeight() / 2)); } void IIDXSubScreen::check_for_errors() { if (games::iidx::CURRENT_IO_EMULATION_STATE == games::iidx::iidx_aio_emulation_state::bi2a_com2) { // explicitly check if LDJ I/O is enabled (as opposed to checking if NOT TDJ I/O) // to account for the fact that I/O emulation may be disabled this->disabled_message = "LDJ I/O detected; TDJ mode subscreen overlay requires TDJ I/O.\n" "Ensure you apply applicable TDJ I/O patches, or run with TDJ DLL."; } } void IIDXSubScreen::touch_transform(const ImVec2 xy_in, LONG *x_out, LONG *y_out) { if (!this->get_active()) { return; } if (GRAPHICS_WINDOWED) { // Touch needs to be registered on global coords *x_out = SPICETOUCH_TOUCH_X + xy_in.x * SPICETOUCH_TOUCH_WIDTH; *y_out = SPICETOUCH_TOUCH_Y + xy_in.y * SPICETOUCH_TOUCH_HEIGHT; } else { // Fullscreen mode, scale to game coords *x_out = xy_in.x * ImGui::GetIO().DisplaySize.x; *y_out = xy_in.y * ImGui::GetIO().DisplaySize.y; } } }