mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-10 18:21:14 +00:00
Remove debug window (#736)
* Remove debug window * LEGO1: remove a few exports * LEGO1: Remove a few `friend class DebugViewer` declarations
This commit is contained in:
parent
d182a8057c
commit
85ff14e997
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -4,9 +4,6 @@
|
||||
[submodule "3rdparty/miniaudio"]
|
||||
path = 3rdparty/miniaudio
|
||||
url = https://github.com/mackron/miniaudio
|
||||
[submodule "imgui"]
|
||||
path = 3rdparty/imgui
|
||||
url = https://github.com/ocornut/imgui
|
||||
[submodule "3rdparty/libweaver"]
|
||||
path = 3rdparty/libweaver
|
||||
url = https://github.com/isledecomp/SIEdit
|
||||
|
||||
26
3rdparty/CMakeLists.txt
vendored
26
3rdparty/CMakeLists.txt
vendored
@ -48,32 +48,6 @@ add_library(libsmacker STATIC
|
||||
)
|
||||
target_include_directories(libsmacker PUBLIC ${libsmacker_SOURCE_DIR})
|
||||
|
||||
if(DOWNLOAD_DEPENDENCIES)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
imgui
|
||||
GIT_REPOSITORY "https://github.com/ocornut/imgui"
|
||||
GIT_TAG f5befd2d29e66809cd1110a152e375a7f1981f06
|
||||
)
|
||||
FetchContent_MakeAvailable(imgui)
|
||||
else()
|
||||
set(imgui_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/imgui")
|
||||
endif()
|
||||
|
||||
add_library(imgui STATIC
|
||||
${imgui_SOURCE_DIR}/imgui.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_demo.cpp
|
||||
${imgui_SOURCE_DIR}/backends/imgui_impl_sdl3.cpp
|
||||
${imgui_SOURCE_DIR}/backends/imgui_impl_sdlrenderer3.cpp
|
||||
)
|
||||
target_include_directories(imgui PUBLIC ${imgui_SOURCE_DIR})
|
||||
target_link_libraries(imgui PUBLIC SDL3::Headers)
|
||||
target_link_libraries(imgui PRIVATE SDL3::SDL3)
|
||||
set_property(TARGET imgui PROPERTY CXX_CLANG_TIDY "")
|
||||
|
||||
if(DOWNLOAD_DEPENDENCIES)
|
||||
include(FetchContent)
|
||||
FetchContent_Populate(
|
||||
|
||||
1
3rdparty/imgui
vendored
1
3rdparty/imgui
vendored
@ -1 +0,0 @@
|
||||
Subproject commit f5befd2d29e66809cd1110a152e375a7f1981f06
|
||||
@ -23,7 +23,6 @@ if (NINTENDO_SWITCH)
|
||||
add_compile_definitions(__SWITCH__)
|
||||
add_compile_definitions(SDL_PLATFORM_SWITCH)
|
||||
add_compile_definitions(SDL_VIDEO_DRIVER_SWITCH)
|
||||
add_compile_definitions(IMGUI_DISABLE_DEFAULT_SHELL_FUNCTIONS)
|
||||
endif()
|
||||
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
|
||||
@ -54,7 +53,6 @@ option(ISLE_BUILD_ASSETS "Build assets from the /assets directory" OFF)
|
||||
option(ISLE_ASAN "Enable Address Sanitizer" OFF)
|
||||
option(ISLE_UBSAN "Enable Undefined Behavior Sanitizer" OFF)
|
||||
option(ISLE_WERROR "Treat warnings as errors" OFF)
|
||||
cmake_dependent_option(ISLE_DEBUG "Enable imgui debug" ON "NOT VITA" OFF)
|
||||
cmake_dependent_option(ISLE_USE_DX5 "Build with internal DirectX 5 SDK" "${NOT_MINGW}" "WIN32;CMAKE_SIZEOF_VOID_P EQUAL 4" OFF)
|
||||
cmake_dependent_option(ISLE_MINIWIN "Use miniwin" ON "NOT ISLE_USE_DX5" OFF)
|
||||
cmake_dependent_option(ISLE_EXTENSIONS "Use extensions" ON "NOT ISLE_USE_DX5;NOT WINDOWS_STORE" OFF)
|
||||
@ -72,7 +70,6 @@ message(STATUS "Config app: ${ISLE_BUILD_CONFIG}")
|
||||
message(STATUS "Internal DirectX5 SDK: ${ISLE_USE_DX5}")
|
||||
message(STATUS "Internal miniwin: ${ISLE_MINIWIN}")
|
||||
message(STATUS "Isle extensions: ${ISLE_EXTENSIONS}")
|
||||
message(STATUS "Isle debugging: ${ISLE_DEBUG}")
|
||||
message(STATUS "Compile shaders: ${ISLE_COMPILE_SHADERS}")
|
||||
|
||||
add_library(Isle::iniparser INTERFACE IMPORTED)
|
||||
@ -573,21 +570,6 @@ if (ISLE_BUILD_APP)
|
||||
endif()
|
||||
# Link LEGO1
|
||||
target_link_libraries(isle PRIVATE lego1)
|
||||
if(ISLE_DEBUG)
|
||||
target_sources(isle PRIVATE
|
||||
ISLE/isledebug.cpp
|
||||
)
|
||||
target_compile_definitions(isle PRIVATE ISLE_DEBUG)
|
||||
target_link_libraries(isle PRIVATE imgui)
|
||||
find_path(valgrind_INCLUDE_PATH NAMES valgrind/callgrind.h)
|
||||
if(valgrind_INCLUDE_PATH)
|
||||
# Run isle under valgrind to create a profile. Use e.g. kcachegrind to view the profile.
|
||||
# > valgrind --tool=callgrind --dump-instr=yes --simulate-cache=yes --collect-jumps=yes \
|
||||
# > --collect-atstart=no --instr-atstart=no ./isle --debug
|
||||
target_compile_definitions(isle PRIVATE ISLE_VALGRIND)
|
||||
target_include_directories(isle PRIVATE ${valgrind_INCLUDE_PATH})
|
||||
endif()
|
||||
endif()
|
||||
if(EMSCRIPTEN)
|
||||
target_sources(isle PRIVATE
|
||||
ISLE/emscripten/config.cpp
|
||||
@ -909,7 +891,7 @@ endif()
|
||||
if(NINTENDO_SWITCH)
|
||||
find_program(NACPTOOL NAMES nacptool)
|
||||
find_program(ELF2NRO NAMES elf2nro)
|
||||
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "isle.nacp"
|
||||
COMMAND "${NACPTOOL}"
|
||||
|
||||
@ -4,7 +4,6 @@
|
||||
|
||||
#include "3dmanager/lego3dmanager.h"
|
||||
#include "decomp.h"
|
||||
#include "isledebug.h"
|
||||
#include "legoanimationmanager.h"
|
||||
#include "legobuildingmanager.h"
|
||||
#include "legogamestate.h"
|
||||
@ -413,8 +412,6 @@ SDL_AppResult SDL_AppIterate(void* appstate)
|
||||
}
|
||||
|
||||
if (!g_closed) {
|
||||
IsleDebug_Render();
|
||||
|
||||
if (g_reqEnableRMDevice) {
|
||||
g_reqEnableRMDevice = FALSE;
|
||||
VideoManager()->EnableRMDevice();
|
||||
@ -455,10 +452,6 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
|
||||
return SDL_APP_CONTINUE;
|
||||
}
|
||||
|
||||
if (IsleDebug_Event(event)) {
|
||||
return SDL_APP_CONTINUE;
|
||||
}
|
||||
|
||||
if (InputManager()) {
|
||||
InputManager()->UpdateLastInputMethod(event);
|
||||
}
|
||||
@ -498,13 +491,11 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
|
||||
|
||||
switch (event->type) {
|
||||
case SDL_EVENT_WINDOW_FOCUS_GAINED:
|
||||
if (!IsleDebug_Enabled()) {
|
||||
g_isle->SetWindowActive(TRUE);
|
||||
Lego()->Resume();
|
||||
}
|
||||
g_isle->SetWindowActive(TRUE);
|
||||
Lego()->Resume();
|
||||
break;
|
||||
case SDL_EVENT_WINDOW_FOCUS_LOST:
|
||||
if (!IsleDebug_Enabled() && g_isle->GetGameStarted()) {
|
||||
if (g_isle->GetGameStarted()) {
|
||||
g_isle->SetWindowActive(FALSE);
|
||||
Lego()->Pause();
|
||||
#ifdef __EMSCRIPTEN__
|
||||
@ -869,8 +860,6 @@ SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
|
||||
|
||||
void SDL_AppQuit(void* appstate, SDL_AppResult result)
|
||||
{
|
||||
IsleDebug_Quit();
|
||||
|
||||
if (appstate != NULL) {
|
||||
SDL_DestroyWindow((SDL_Window*) appstate);
|
||||
}
|
||||
@ -1040,8 +1029,6 @@ MxResult IsleApp::SetupWindow()
|
||||
}
|
||||
}
|
||||
|
||||
IsleDebug_Init();
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@ -1265,10 +1252,6 @@ inline bool IsleApp::Tick()
|
||||
// GLOBAL: ISLE 0x4101bc
|
||||
static MxS32 g_startupDelay = 1;
|
||||
|
||||
if (IsleDebug_Paused() && IsleDebug_StepModeEnabled()) {
|
||||
IsleDebug_SetPaused(false);
|
||||
}
|
||||
|
||||
if (!m_windowActive) {
|
||||
SDL_Delay(1);
|
||||
return true;
|
||||
@ -1299,11 +1282,6 @@ inline bool IsleApp::Tick()
|
||||
}
|
||||
g_lastFrameTime = currentTime;
|
||||
|
||||
if (IsleDebug_StepModeEnabled()) {
|
||||
IsleDebug_SetPaused(true);
|
||||
IsleDebug_ResetStepMode();
|
||||
}
|
||||
|
||||
if (g_startupDelay == 0) {
|
||||
return true;
|
||||
}
|
||||
@ -1402,14 +1380,6 @@ SDL_AppResult IsleApp::ParseArguments(int argc, char** argv)
|
||||
m_iniPath = argv[i + 1];
|
||||
consumed = 2;
|
||||
}
|
||||
else if (strcmp(argv[i], "--debug") == 0) {
|
||||
#ifdef ISLE_DEBUG
|
||||
IsleDebug_SetEnabled(true);
|
||||
#else
|
||||
SDL_Log("isle is built without debug support. Ignoring --debug argument.");
|
||||
#endif
|
||||
consumed = 1;
|
||||
}
|
||||
else if (strcmp(argv[i], "--help") == 0) {
|
||||
DisplayArgumentHelp(argv[0]);
|
||||
return SDL_APP_SUCCESS;
|
||||
@ -1429,9 +1399,6 @@ void IsleApp::DisplayArgumentHelp(const char* p_execName)
|
||||
SDL_Log("Usage: %s [options]", p_execName);
|
||||
SDL_Log("Options:");
|
||||
SDL_Log(" --ini <path> Set custom path to .ini config");
|
||||
#ifdef ISLE_DEBUG
|
||||
SDL_Log(" --debug Launch in debug mode");
|
||||
#endif
|
||||
SDL_Log(" --help Show this help message");
|
||||
}
|
||||
|
||||
|
||||
@ -1,400 +0,0 @@
|
||||
#include "isledebug.h"
|
||||
|
||||
#include "isleapp.h"
|
||||
#include "lego/sources/roi/legoroi.h"
|
||||
#include "legobuildingmanager.h"
|
||||
#include "legoentity.h"
|
||||
#include "legogamestate.h"
|
||||
#include "legoplantmanager.h"
|
||||
#include "legosoundmanager.h"
|
||||
#include "legovideomanager.h"
|
||||
#include "misc.h"
|
||||
#include "mxticklemanager.h"
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <backends/imgui_impl_sdl3.h>
|
||||
#include <backends/imgui_impl_sdlrenderer3.h>
|
||||
#include <imgui.h>
|
||||
|
||||
#ifdef ISLE_VALGRIND
|
||||
#include <valgrind/callgrind.h>
|
||||
#endif
|
||||
|
||||
#define SCANCODE_KEY_PAUSE SDL_SCANCODE_KP_0
|
||||
#define SCANCODE_KEY_RESUME SDL_SCANCODE_KP_PERIOD
|
||||
|
||||
static bool g_debugEnabled;
|
||||
static bool g_debugPaused;
|
||||
static bool g_debugDoStep;
|
||||
static SDL_Window* g_debugWindow;
|
||||
static SDL_Renderer* g_debugRenderer;
|
||||
|
||||
static SDL_Texture* g_videoPalette;
|
||||
static IDirect3DRMMiniwinDevice* g_d3drmMiniwinDevice;
|
||||
|
||||
#ifdef ISLE_VALGRIND
|
||||
static bool g_instrumentationEnabled;
|
||||
#endif
|
||||
|
||||
class DebugViewer {
|
||||
public:
|
||||
static void InsidePlantManager()
|
||||
{
|
||||
LegoPlantManager* plantManager = Lego()->GetPlantManager();
|
||||
ImGui::Value("#plants", plantManager->GetNumPlants());
|
||||
ImGui::Value("#entries", plantManager->m_numEntries);
|
||||
if (plantManager->m_numEntries) {
|
||||
if (ImGui::BeginTable("Animated Entries", 4, ImGuiTableFlags_Borders)) {
|
||||
ImGui::TableSetupColumn("ROI Name");
|
||||
ImGui::TableSetupColumn("ROI m_sharedLodList");
|
||||
ImGui::TableSetupColumn("Entity Name");
|
||||
ImGui::TableSetupColumn("Time");
|
||||
ImGui::TableHeadersRow();
|
||||
for (MxS8 i = 0; i < plantManager->m_numEntries; i++) {
|
||||
const auto* entry = plantManager->m_entries[i];
|
||||
ImGui::TableNextRow();
|
||||
ImGui::Text("%s", entry->m_roi->m_name);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%d", entry->m_roi->m_sharedLodList);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%s", entry->m_roi->m_entity->ClassName());
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%d", entry->m_time);
|
||||
}
|
||||
ImGui::EndTable();
|
||||
}
|
||||
}
|
||||
}
|
||||
static void InsideBuildingManager()
|
||||
{
|
||||
auto buildingManager = Lego()->GetBuildingManager();
|
||||
ImGui::Text("nextVariant: %u", buildingManager->m_nextVariant);
|
||||
ImGui::Text("m_boundariesDetermined: %d", buildingManager->m_boundariesDetermined);
|
||||
ImGui::Text("m_hideAfterAnimation: %d", buildingManager->m_hideAfterAnimation);
|
||||
ImGui::Text("#Animated Entries: %d", buildingManager->m_numEntries);
|
||||
if (buildingManager->m_numEntries) {
|
||||
if (ImGui::BeginTable("Animated Entries", 6, ImGuiTableFlags_Borders)) {
|
||||
ImGui::TableSetupColumn("ROI Name");
|
||||
ImGui::TableSetupColumn("ROI m_sharedLodList");
|
||||
ImGui::TableSetupColumn("Entity Name");
|
||||
ImGui::TableSetupColumn("Time");
|
||||
ImGui::TableSetupColumn("Y");
|
||||
ImGui::TableSetupColumn("Muted");
|
||||
ImGui::TableHeadersRow();
|
||||
for (MxS8 i = 0; i < buildingManager->m_numEntries; i++) {
|
||||
const auto* entry = buildingManager->m_entries[i];
|
||||
ImGui::TableNextRow();
|
||||
ImGui::Text("%s", entry->m_roi->m_name);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%d", entry->m_roi->m_sharedLodList);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%s", entry->m_roi->m_entity->ClassName());
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%d", entry->m_time);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%f", entry->m_y);
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%d", entry->m_muted);
|
||||
}
|
||||
ImGui::EndTable();
|
||||
}
|
||||
}
|
||||
}
|
||||
static void InsideTickleManager()
|
||||
{
|
||||
auto tickleManager = Lego()->GetTickleManager();
|
||||
ImGui::Value("#clients", static_cast<int>(tickleManager->m_clients.size()));
|
||||
if (ImGui::BeginTable("Clients", 3, ImGuiTableFlags_Borders)) {
|
||||
ImGui::TableSetupColumn("Client");
|
||||
ImGui::TableSetupColumn("Interval");
|
||||
ImGui::TableSetupColumn("Flags");
|
||||
ImGui::TableHeadersRow();
|
||||
for (const auto* ticleClient : tickleManager->m_clients) {
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%s", ticleClient->GetClient()->ClassName());
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("%d", ticleClient->GetTickleInterval());
|
||||
ImGui::TableNextColumn();
|
||||
ImGui::Text("0x%x", ticleClient->GetFlags());
|
||||
}
|
||||
ImGui::EndTable();
|
||||
}
|
||||
}
|
||||
static void InsideVideoManager()
|
||||
{
|
||||
auto videoManager = Lego()->GetVideoManager();
|
||||
SDL_UpdateTexture(g_videoPalette, NULL, videoManager->m_paletteEntries, 4 * 16);
|
||||
ImGui::Text("Elapsed: %gs", static_cast<float>(videoManager->GetElapsedSeconds()));
|
||||
ImGui::Text("Render3D: %d", videoManager->GetRender3D());
|
||||
ImGui::Text("unk0xe5: %d", videoManager->m_unk0xe5);
|
||||
ImGui::Text("unk0xe5: %d", videoManager->m_unk0xe6);
|
||||
ImGui::Text("unk0x54c: %f", videoManager->m_unk0x54c);
|
||||
ImGui::Text("unk0x54c: %f", videoManager->m_unk0x550);
|
||||
ImGui::Text("unk0x54c: %d", videoManager->m_unk0x554);
|
||||
ImGui::Text("unk0x70: %u", videoManager->m_unk0x70);
|
||||
ImGui::Text("Dither: %d", videoManager->m_dither);
|
||||
ImGui::Text("BufferCount: %u", videoManager->m_bufferCount);
|
||||
ImGui::Text("Paused: %d", videoManager->m_paused);
|
||||
ImGui::Text("back: %g", videoManager->m_back);
|
||||
ImGui::Text("front: %g", videoManager->m_front);
|
||||
ImGui::Text("cameraWidth: %g", videoManager->m_cameraWidth);
|
||||
ImGui::Text("cameraHeight: %g", videoManager->m_cameraHeight);
|
||||
ImGui::Text("fov: %g", videoManager->m_fov);
|
||||
ImVec2 uv_min = ImVec2(0.0f, 0.0f);
|
||||
ImVec2 uv_max = ImVec2(1.0f, 1.0f);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_ImageBorderSize, SDL_max(1.0f, ImGui::GetStyle().ImageBorderSize));
|
||||
ImGui::ImageWithBg(
|
||||
(ImTextureID) (uintptr_t) g_videoPalette,
|
||||
ImVec2(200, 200),
|
||||
uv_min,
|
||||
uv_max,
|
||||
ImVec4(0.0f, 0.0f, 0.0f, 1.0f)
|
||||
);
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
};
|
||||
|
||||
void IsleDebug_Init()
|
||||
{
|
||||
do {
|
||||
if (!g_debugEnabled) {
|
||||
break;
|
||||
}
|
||||
if (!SDL_CreateWindowAndRenderer(
|
||||
"Debug ISLE",
|
||||
640,
|
||||
480,
|
||||
SDL_WINDOW_RESIZABLE,
|
||||
&g_debugWindow,
|
||||
&g_debugRenderer
|
||||
)) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to create debug window");
|
||||
break;
|
||||
}
|
||||
IMGUI_CHECKVERSION();
|
||||
ImGui::CreateContext();
|
||||
ImGui::StyleColorsDark();
|
||||
|
||||
if (!ImGui_ImplSDL3_InitForSDLRenderer(g_debugWindow, g_debugRenderer)) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "ImGui_ImplSDL3_InitForSDLRenderer failed");
|
||||
g_debugEnabled = false;
|
||||
break;
|
||||
}
|
||||
g_videoPalette =
|
||||
SDL_CreateTexture(g_debugRenderer, SDL_PIXELFORMAT_RGBX32, SDL_TEXTUREACCESS_STREAMING, 16, 16);
|
||||
#if SDL_VERSION_ATLEAST(3, 3, 0)
|
||||
SDL_SetTextureScaleMode(g_videoPalette, SDL_SCALEMODE_PIXELART);
|
||||
#else
|
||||
SDL_SetTextureScaleMode(g_videoPalette, SDL_SCALEMODE_NEAREST);
|
||||
#endif
|
||||
if (!ImGui_ImplSDLRenderer3_Init(g_debugRenderer)) {
|
||||
g_debugEnabled = false;
|
||||
break;
|
||||
}
|
||||
g_d3drmMiniwinDevice = GetD3DRMMiniwinDevice();
|
||||
} while (0);
|
||||
if (!g_debugEnabled) {
|
||||
if (g_debugRenderer) {
|
||||
SDL_DestroyRenderer(g_debugRenderer);
|
||||
g_debugRenderer = nullptr;
|
||||
}
|
||||
if (g_debugWindow) {
|
||||
SDL_DestroyWindow(g_debugWindow);
|
||||
g_debugWindow = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void IsleDebug_Quit()
|
||||
{
|
||||
SDL_DestroyRenderer(g_debugRenderer);
|
||||
SDL_DestroyWindow(g_debugWindow);
|
||||
if (g_d3drmMiniwinDevice) {
|
||||
g_d3drmMiniwinDevice->Release();
|
||||
}
|
||||
}
|
||||
|
||||
bool IsleDebug_Event(SDL_Event* event)
|
||||
{
|
||||
if (!g_debugEnabled) {
|
||||
return false;
|
||||
}
|
||||
if (event->type == SDL_EVENT_KEY_DOWN) {
|
||||
if (event->key.scancode == SCANCODE_KEY_PAUSE) {
|
||||
if (!g_debugPaused) {
|
||||
IsleDebug_SetPaused(true);
|
||||
}
|
||||
else {
|
||||
g_debugDoStep = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (event->key.scancode == SCANCODE_KEY_RESUME) {
|
||||
g_debugDoStep = false;
|
||||
if (g_debugPaused) {
|
||||
IsleDebug_SetPaused(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (SDL_GetWindowFromEvent(event) != g_debugWindow) {
|
||||
return false;
|
||||
}
|
||||
ImGui_ImplSDL3_ProcessEvent(event);
|
||||
return true;
|
||||
}
|
||||
|
||||
void IsleDebug_Render()
|
||||
{
|
||||
if (!g_debugEnabled) {
|
||||
return;
|
||||
}
|
||||
const ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
|
||||
|
||||
ImGui_ImplSDLRenderer3_NewFrame();
|
||||
ImGui_ImplSDL3_NewFrame();
|
||||
ImGui::NewFrame();
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
{
|
||||
ImGui::BeginMainMenuBar();
|
||||
if (ImGui::MenuItem(g_debugPaused ? "Resume" : "Pause")) {
|
||||
g_debugPaused = !g_debugPaused;
|
||||
if (g_debugPaused) {
|
||||
g_isle->SetWindowActive(false);
|
||||
Lego()->Pause();
|
||||
}
|
||||
else {
|
||||
g_isle->SetWindowActive(true);
|
||||
Lego()->Resume();
|
||||
}
|
||||
}
|
||||
#ifdef ISLE_VALGRIND
|
||||
if (ImGui::MenuItem(g_instrumentationEnabled ? "Disable instrumentation" : "Enable instrumentation")) {
|
||||
g_instrumentationEnabled = !g_instrumentationEnabled;
|
||||
if (g_instrumentationEnabled) {
|
||||
CALLGRIND_START_INSTRUMENTATION;
|
||||
CALLGRIND_TOGGLE_COLLECT;
|
||||
}
|
||||
else {
|
||||
CALLGRIND_TOGGLE_COLLECT;
|
||||
CALLGRIND_STOP_INSTRUMENTATION;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
ImGui::EndMainMenuBar();
|
||||
ImGui::ShowDemoWindow(nullptr);
|
||||
LegoOmni* lego = Lego();
|
||||
if (ImGui::Begin("LEGO")) {
|
||||
if (ImGui::TreeNode("Game State")) {
|
||||
LegoGameState* gameState = lego->GetGameState();
|
||||
ImGui::Value("Actor Id", gameState->GetActorId());
|
||||
ImGui::Text("Actor Name: %s", gameState->GetActorName());
|
||||
ImGui::Text("Current act: %d", gameState->GetCurrentAct());
|
||||
ImGui::Text("Loaded act: %d", gameState->GetLoadedAct());
|
||||
ImGui::Text("Previous area: %d", gameState->m_previousArea);
|
||||
ImGui::Text("Saved previous area: %d", gameState->m_savedPreviousArea);
|
||||
ImGui::Value("Player count", gameState->m_playerCount);
|
||||
ImGui::TreePop();
|
||||
}
|
||||
if (ImGui::TreeNode("Renderer")) {
|
||||
if (g_d3drmMiniwinDevice) {
|
||||
ImGui::Text("Using miniwin driver");
|
||||
}
|
||||
else {
|
||||
ImGui::Text("No miniwin driver");
|
||||
}
|
||||
ImGui::TreePop();
|
||||
}
|
||||
if (ImGui::TreeNode("Sound Manager")) {
|
||||
LegoSoundManager* soundManager = lego->GetSoundManager();
|
||||
Sint32 oldVolume = soundManager->GetVolume();
|
||||
int volume = oldVolume;
|
||||
ImGui::SliderInt("volume", &volume, 0, 100);
|
||||
if (volume != oldVolume) {
|
||||
soundManager->SetVolume(volume);
|
||||
}
|
||||
ImGui::TreePop();
|
||||
}
|
||||
if (ImGui::TreeNode("Video Manager")) {
|
||||
DebugViewer::InsideVideoManager();
|
||||
ImGui::TreePop();
|
||||
}
|
||||
if (ImGui::TreeNode("Plant Manager")) {
|
||||
DebugViewer::InsidePlantManager();
|
||||
ImGui::TreePop();
|
||||
}
|
||||
if (ImGui::TreeNode("Building Manager")) {
|
||||
DebugViewer::InsideBuildingManager();
|
||||
ImGui::TreePop();
|
||||
}
|
||||
if (ImGui::TreeNode("Tickle Manager")) {
|
||||
DebugViewer::InsideTickleManager();
|
||||
ImGui::TreePop();
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
ImGui::Render();
|
||||
SDL_RenderClear(g_debugRenderer);
|
||||
SDL_SetRenderScale(g_debugRenderer, io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
|
||||
SDL_SetRenderDrawColor(
|
||||
g_debugRenderer,
|
||||
(Uint8) (clear_color.x * 255),
|
||||
(Uint8) (clear_color.y * 255),
|
||||
(Uint8) (clear_color.z * 255),
|
||||
(Uint8) (clear_color.w * 255)
|
||||
);
|
||||
ImGui_ImplSDLRenderer3_RenderDrawData(ImGui::GetDrawData(), g_debugRenderer);
|
||||
SDL_RenderPresent(g_debugRenderer);
|
||||
}
|
||||
|
||||
bool IsleDebug_Enabled()
|
||||
{
|
||||
return g_debugEnabled;
|
||||
}
|
||||
|
||||
void IsleDebug_SetEnabled(bool v)
|
||||
{
|
||||
if (v) {
|
||||
SDL_Log(
|
||||
"Press \"%s\" for pausing/stepping the game",
|
||||
SDL_GetKeyName(SDL_GetKeyFromScancode(SCANCODE_KEY_PAUSE, 0, false))
|
||||
);
|
||||
SDL_Log(
|
||||
"Press \"%s\" for resuming the game",
|
||||
SDL_GetKeyName(SDL_GetKeyFromScancode(SCANCODE_KEY_RESUME, 0, false))
|
||||
);
|
||||
}
|
||||
g_debugEnabled = v;
|
||||
}
|
||||
|
||||
void IsleDebug_SetPaused(bool v)
|
||||
{
|
||||
SDL_assert(g_debugPaused == !v);
|
||||
g_debugPaused = v;
|
||||
if (g_debugPaused) {
|
||||
g_isle->SetWindowActive(false);
|
||||
Lego()->Pause();
|
||||
}
|
||||
else {
|
||||
g_isle->SetWindowActive(true);
|
||||
Lego()->Resume();
|
||||
}
|
||||
}
|
||||
|
||||
bool IsleDebug_Paused()
|
||||
{
|
||||
return g_debugPaused;
|
||||
}
|
||||
|
||||
void IsleDebug_ResetStepMode()
|
||||
{
|
||||
g_debugDoStep = false;
|
||||
}
|
||||
|
||||
bool IsleDebug_StepModeEnabled()
|
||||
{
|
||||
return g_debugDoStep;
|
||||
}
|
||||
@ -1,64 +0,0 @@
|
||||
#ifndef ISLEDEBUG_H
|
||||
#define ISLEDEBUG_H
|
||||
|
||||
#if defined(ISLE_DEBUG)
|
||||
|
||||
typedef union SDL_Event SDL_Event;
|
||||
|
||||
extern bool IsleDebug_Enabled();
|
||||
|
||||
extern void IsleDebug_SetEnabled(bool);
|
||||
|
||||
extern void IsleDebug_Init();
|
||||
|
||||
extern void IsleDebug_Quit();
|
||||
|
||||
extern bool IsleDebug_Event(SDL_Event* event);
|
||||
|
||||
extern void IsleDebug_Render();
|
||||
|
||||
extern void IsleDebug_SetPaused(bool v);
|
||||
|
||||
extern bool IsleDebug_Paused();
|
||||
|
||||
extern bool IsleDebug_StepModeEnabled();
|
||||
|
||||
extern void IsleDebug_ResetStepMode();
|
||||
|
||||
#else
|
||||
|
||||
#define IsleDebug_Enabled() (false)
|
||||
|
||||
#define IsleDebug_SetEnabled(V) \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#define IsleDebug_Init() \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#define IsleDebug_Quit() \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#define IsleDebug_Event(EVENT) (false)
|
||||
|
||||
#define IsleDebug_Render() \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#define IsleDebug_SetPaused(X) \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#define IsleDebug_Paused() (false)
|
||||
|
||||
#define IsleDebug_StepModeEnabled() (false)
|
||||
|
||||
#define IsleDebug_ResetStepMode() \
|
||||
do { \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -109,8 +109,6 @@ class LegoBuildingManager : public MxCore {
|
||||
LegoCacheSound* m_sound; // 0x24
|
||||
MxBool m_hideAfterAnimation; // 0x28
|
||||
LegoWorld* m_world; // 0x2c
|
||||
|
||||
friend class DebugViewer;
|
||||
};
|
||||
|
||||
#endif // LEGOBUILDINGMANAGER_H
|
||||
|
||||
@ -15,7 +15,7 @@ class LegoStorage;
|
||||
class MxVariableTable;
|
||||
class MxString;
|
||||
|
||||
LEGO1_EXPORT extern const char* g_actorNames[7];
|
||||
extern const char* g_actorNames[7];
|
||||
|
||||
// SIZE 0x08
|
||||
struct ColorStringStruct {
|
||||
|
||||
@ -14,7 +14,7 @@ class LegoWorld;
|
||||
|
||||
// VTABLE: LEGO1 0x100d6758
|
||||
// SIZE 0x2c
|
||||
class LEGO1_EXPORT LegoPlantManager : public MxCore {
|
||||
class LegoPlantManager : public MxCore {
|
||||
public:
|
||||
// SIZE 0x0c
|
||||
struct AnimEntry {
|
||||
@ -82,8 +82,6 @@ class LEGO1_EXPORT LegoPlantManager : public MxCore {
|
||||
AnimEntry* m_entries[5]; // 0x10
|
||||
MxS8 m_numEntries; // 0x24
|
||||
LegoWorld* m_world; // 0x28
|
||||
|
||||
friend class DebugViewer;
|
||||
};
|
||||
|
||||
#endif // LEGOPLANTMANAGER_H
|
||||
|
||||
@ -137,8 +137,6 @@ class LegoVideoManager : public MxVideoManager {
|
||||
D3DRMRENDERMODE m_rendermode; // 0x584
|
||||
BOOL m_dither; // 0x588
|
||||
DWORD m_bufferCount; // 0x58c
|
||||
|
||||
friend class DebugViewer;
|
||||
};
|
||||
|
||||
#endif // LEGOVIDEOMANAGER_H
|
||||
|
||||
@ -101,8 +101,6 @@ class LegoROI : public ViewROI {
|
||||
BoundingSphere m_sphere; // 0xe8
|
||||
LegoBool m_sharedLodList; // 0x100
|
||||
LegoEntity* m_entity; // 0x104
|
||||
|
||||
friend class DebugViewer;
|
||||
};
|
||||
|
||||
// VTABLE: LEGO1 0x100dbea8
|
||||
|
||||
@ -55,8 +55,6 @@ class MxTickleManager : public MxCore {
|
||||
|
||||
private:
|
||||
MxTickleClientPtrList m_clients; // 0x08
|
||||
|
||||
friend class DebugViewer;
|
||||
};
|
||||
|
||||
#define TICKLE_MANAGER_NOT_FOUND 0x80000000
|
||||
|
||||
Loading…
Reference in New Issue
Block a user