初始化提交
This commit is contained in:
77
Content/Lua/UI/GameUIHud.lua
Normal file
77
Content/Lua/UI/GameUIHud.lua
Normal file
@ -0,0 +1,77 @@
|
||||
local Hud = {}
|
||||
local ESlateVisibility = import("ESlateVisibility")
|
||||
local WidgetBlueprintLibrary = import("WidgetBlueprintLibrary")
|
||||
local GameplayStatics = import("GameplayStatics")
|
||||
local BusyActorManagerSubSystem = import("BusyActorManagerSubSystem")
|
||||
|
||||
|
||||
local function ProcessSuspendShowRequests(hud)
|
||||
for _, request in pairs(hud.suspend_show_requests) do
|
||||
hud:CreateAndShowWidget(request[1], request[2])
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
function Hud:ctor()
|
||||
self.layer = nil
|
||||
self.suspend_show_requests = {}
|
||||
self.widget_pool = {}
|
||||
end
|
||||
|
||||
function Hud:ReceiveBeginPlay()
|
||||
print("Hud:ReceiveBeginPlay")
|
||||
|
||||
if self.layer == nil then
|
||||
self.layer = self:GetOrCreateWidget("UILayer")
|
||||
end
|
||||
if self.layer ~= nil then
|
||||
self.layer:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
|
||||
self.layer:AddToViewport(0)
|
||||
self:CreateAndShowWidget("MainUI", {})
|
||||
ProcessSuspendShowRequests(self)
|
||||
end
|
||||
end
|
||||
|
||||
function Hud:ReceiveEndPlay()
|
||||
print("Hud:ReceiveEndPlay")
|
||||
end
|
||||
|
||||
|
||||
function Hud:GetOrCreateWidget(widget_name)
|
||||
local exist_widget = self.widget_pool[widget_name]
|
||||
if exist_widget ~= nil and exist_widget.bSingletonInstance then
|
||||
return exist_widget
|
||||
end
|
||||
local cls = self.UIClassMapping:Get(widget_name)
|
||||
local pc = GameplayStatics.GetPlayerController(self, 0)
|
||||
local widget = WidgetBlueprintLibrary.Create(self, cls, pc)
|
||||
self.widget_pool[widget_name] = widget
|
||||
return widget -- TODO 这里如果非单例widget,会被覆盖
|
||||
end
|
||||
|
||||
function Hud:GetFirstCachedWidget(widget_name)
|
||||
return self.widget_pool[widget_name]
|
||||
end
|
||||
|
||||
function Hud:CreateAndShowWidget(widget_name, args)
|
||||
if not self.layer then
|
||||
table.insert(self.suspend_show_requests, {widget_name, args})
|
||||
return
|
||||
end
|
||||
local widget = self:GetOrCreateWidget(widget_name)
|
||||
if not widget then return end
|
||||
self.layer:ShowWidget(widget, args)
|
||||
end
|
||||
|
||||
function Hud:CloseWidget(widget)
|
||||
self.layer:CloseWidget(widget)
|
||||
end
|
||||
|
||||
function Hud:HideWidgetByName(widget_name)
|
||||
self.layer:HideWidget(self.widget_pool[widget_name])
|
||||
end
|
||||
|
||||
|
||||
|
||||
return Class(nil, nil, Hud)
|
||||
Reference in New Issue
Block a user