81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
|  | local PopupMenuPanel = {} | ||
|  | local UIUtils = require("UI.Utils") | ||
|  | local GameplayStatics = import("GameplayStatics") | ||
|  | local WidgetBlueprintLibrary = import("WidgetBlueprintLibrary") | ||
|  | local KismetSystemLibrary = import("KismetSystemLibrary") | ||
|  | 
 | ||
|  | 
 | ||
|  | local function delay_adjust_content(menu_panel) | ||
|  |     local post_callback = function() | ||
|  |         local timer = KismetSystemLibrary.K2_SetTimerForNextTickDelegate( | ||
|  |             slua.createDelegate(function () | ||
|  |                 menu_panel:AdjustMenuContentSize() | ||
|  |                 menu_panel.adjust_content_timer = nil | ||
|  |             end) | ||
|  |         ) | ||
|  |         menu_panel.adjust_content_timer = timer | ||
|  |     end | ||
|  | 
 | ||
|  |     local timer = KismetSystemLibrary.K2_SetTimerForNextTickDelegate( | ||
|  |         slua.createDelegate(function () post_callback() end) | ||
|  |     ) | ||
|  |     menu_panel.adjust_content_timer = timer | ||
|  | end | ||
|  | 
 | ||
|  | local function CreateMenuItem(panel) | ||
|  |     local pc = GameplayStatics.GetPlayerController(panel, 0) | ||
|  |     local widget = WidgetBlueprintLibrary.Create(panel, panel.MenuItemClass, pc) | ||
|  |     return widget | ||
|  | end | ||
|  | 
 | ||
|  | 
 | ||
|  | function PopupMenuPanel:ctor() | ||
|  |     self.adjust_content_timer = nil | ||
|  | end | ||
|  | 
 | ||
|  | function PopupMenuPanel:OnInitialized() | ||
|  |     self.BtnBackground.OnClicked:Add(function() | ||
|  |         UIUtils.CloseWidget(self) | ||
|  |     end) | ||
|  | end | ||
|  | 
 | ||
|  | function PopupMenuPanel:OnDestroy() | ||
|  |     print(self, "PopupMenuPanel:OnDestroy") | ||
|  | end | ||
|  | 
 | ||
|  | function PopupMenuPanel:PreConstruct(IsDesignTime) | ||
|  |     if not IsDesignTime then return end | ||
|  |     delay_adjust_content(self) | ||
|  | end | ||
|  | 
 | ||
|  | 
 | ||
|  | function PopupMenuPanel:Construct() | ||
|  |     delay_adjust_content(self) | ||
|  | end | ||
|  | 
 | ||
|  | function PopupMenuPanel:AdjustMenuContentSize() | ||
|  |     local all_child_height = 0 | ||
|  |     for _, child in pairs(self.MenuItemContainer:GetAllChildren()) do | ||
|  |         local design_size = child:GetDesiredSize() | ||
|  |         all_child_height = all_child_height + design_size.Y | ||
|  |     end | ||
|  |     self.ImgBackground.Brush.ImageSize.Y = all_child_height + 20 | ||
|  | end | ||
|  | 
 | ||
|  | 
 | ||
|  | function PopupMenuPanel:Refresh(args) | ||
|  |     self.MainOverlay.Slot:SetPosition(args[1]) | ||
|  |     self:SetMenuContents(args[2]) | ||
|  | end | ||
|  | 
 | ||
|  | function PopupMenuPanel:SetMenuContents(contents) | ||
|  |     self.MenuItemContainer:ClearChildren() | ||
|  |     for _, content in pairs(contents) do | ||
|  |         local widget = CreateMenuItem(self) | ||
|  |         self.MenuItemContainer:AddChildToVerticalBox(widget) | ||
|  |         widget:SetContent(content[1], content[2]) | ||
|  |     end | ||
|  |     self:AdjustMenuContentSize() | ||
|  | end | ||
|  | 
 | ||
|  | return Class(nil, nil,PopupMenuPanel) |