diff --git a/libs/UEngine/UETools.cpp b/libs/UEngine/UETools.cpp index d69d5a3..89497c9 100644 --- a/libs/UEngine/UETools.cpp +++ b/libs/UEngine/UETools.cpp @@ -1,5 +1,6 @@ #include "UETools.hpp" #include "Engine_classes.hpp" +#include "UMG_classes.hpp" SDK::APawn* GetPawnFromWorld(SDK::UWorld* world) { if (!world) world = SDK::UWorld::GetWorld(); @@ -60,4 +61,24 @@ void ReactivateDevConsole(std::shared_ptr logger) { return; } }).detach(); +} + +void ApplyOffsetsRecursive(SDK::UWidget* widget, float left, float right) { + if (widget && widget->Slot && widget->Slot->IsA(SDK::UCanvasPanelSlot::StaticClass())) { + auto* slot = (SDK::UCanvasPanelSlot*)widget->Slot; + if (!slot) return; + SDK::FMargin offsets = slot->GetOffsets(); + + if (offsets.Left != left || offsets.Right != right) { + offsets.Left = left; + offsets.Right = right; + slot->SetOffsets(offsets); + } + } + // Go down if UPanelWidget + if (widget && widget->IsA(SDK::UPanelWidget::StaticClass())) { + if (auto* panel = (SDK::UPanelWidget*)widget) + for (int i = 0; i < panel->GetChildrenCount(); ++i) + ApplyOffsetsRecursive(panel->GetChildAt(i), left, right); + } } \ No newline at end of file diff --git a/libs/UEngine/UETools.hpp b/libs/UEngine/UETools.hpp index 1ac6328..756a59e 100644 --- a/libs/UEngine/UETools.hpp +++ b/libs/UEngine/UETools.hpp @@ -8,6 +8,7 @@ namespace SDK { class UEngine; class UObject; class UWorld; + class UWidget; class APawn; class UGameplayStatics; class UConsole; @@ -25,4 +26,16 @@ namespace SDK { */ SDK::APawn* GetPawnFromWorld(SDK::UWorld* world = nullptr); -void ReactivateDevConsole(std::shared_ptr logger); \ No newline at end of file +/** + * @brief Reactivate the development console. + * @param logger spdlog. + */ +void ReactivateDevConsole(std::shared_ptr logger); + +/** + * @brief Apply offsets recursively to UVCanvasPanelSlot. + * @param widget type of UUserWidget* (pointer). + * @param left offset. + * @param right offset. + */ +void ApplyOffsetsRecursive(SDK::UWidget* widget, float left, float right = 0);