#pragma once #include "generated/skate3_init.h" #include #include #include #include #include #include #include #include #include #include #include "skate3_native_debug_dialog.h" namespace rex::ui { class ImGuiDrawer; } class Skate3BaseApp : public rex::ReXApp { public: using rex::ReXApp::ReXApp; ~Skate3BaseApp() override; protected: std::optional OnFinalizePaths( const rex::PathConfig& defaults, std::function resume) override; void OnConfigurePaths(rex::PathConfig& paths) override; void OnConfigureFonts(ImFontAtlas* atlas) override; void OnCreateDialogs(rex::ui::ImGuiDrawer* drawer) override; void OnPostSetup() override; void OnShutdown() override; private: void InstallRecipeOverlay(); void InstallBigDeviceAliases(); void InstallDlcPackages(); void ToggleSimpleSettings(); void ToggleUltrawideTargets(); void ToggleNativeDebug(); void ApplySettingsCursorMode(); void ApplyGameplayCursorMode(); void RestartGame(); void SaveDrawFingerprintLog(); void LogUserMarker(); void LogDebugMarker(); void ApplySelectedProfileToRuntime(); static bool IsRecipeNameChar(char c); static std::set DiscoverRecipeAliases( const std::filesystem::path& content_root); static bool CreateOverlayDirectory(const std::filesystem::path& overlay_root, std::string_view guest_path); std::filesystem::path config_path_; std::filesystem::path user_settings_path_; std::filesystem::path profiles_path_; std::unique_ptr simple_settings_dialog_; std::unique_ptr ultrawide_targets_dialog_; std::unique_ptr native_debug_dialog_; std::unique_ptr render_mode_indicator_; bool recipe_overlay_installed_ = false; bool big_device_aliases_installed_ = false; std::atomic debug_marker_count_{0}; };