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)
							 |