#pragma once #include "UMG_classes.hpp" #include #include #include inline std::atomic_bool g_Console_Enabled { false }; namespace SDK { class UEngine; class UObject; class UWorld; class UWidget; class APawn; class UGameplayStatics; class UConsole; class UInputSettings; class UKismetStringLibrary; class UGameInstance; class ULocalPlayer; class APlayerController; } struct WidgetTrackInfo { std::string ClassName; std::string RootWidgetClass; std::string OuterClass; bool WasInViewport = false; int ConstructCount = 0; int DestructCount = 0; std::chrono::steady_clock::time_point FirstSeen; }; static std::unordered_map g_WidgetTracker; // Unreal Engine functions /** * @brief Gets the current player Pawn from the world. * @param world Optional UWorld pointer. * @return Player Pawn or nullptr. */ SDK::APawn* GetPawnFromWorld(SDK::UWorld* world = nullptr); /** * @brief Reactivate the development console. * @param logger spdlog. */ void ReactivateDevConsole(std::shared_ptr logger); /** * @brief Apply offsets recursively to UVCanvasPanelSlot. * @param widget UUserWidget* pointer. * @param left offset. * @param right offset. */ void ApplyOffsetsRecursive(SDK::UWidget* widget, float left, float right = 0, int MaxDepth = INT_MAX); /** * @brief Apply offsets recursively to Overlay. * @param widget UUserWidget* pointer. * @param Offset (left and right offsets). * @param alignment widget (left, right, center, fill ...) * @param ExcludeNames excluded class widgets in depth check * @param MaxDepth Max depth to go through root component */ void ApplyOverlayOffsetRecursive(SDK::UWidget* Widget, float Offset, SDK::EHorizontalAlignment alignment, const std::vector& ExcludeNames = {}, int MaxDepth = INT_MAX); void FindAndApplyCanvasRecursive(SDK::UWidget* widget, float offset, int MaxDepth = INT_MAX, int currentDepth = 0); /** * @brief Tracks potential widgets candidates for HUD & UI at construction * @param widget UUserWidget* pointer. */ void TrackWidgetConstruct(SDK::UUserWidget* widget); /** * @brief Tracks potential widgets candidates for HUD & UI at destruction * @param widget UUserWidget* pointer. */ void TrackWidgetDestruct(SDK::UUserWidget* widget); /** * @brief Dump and log previously searched UI & HUD wisgets * @param logger the log object. */ void DumpUIAnalysis(std::shared_ptr logger); void ClearWidgetTracking();