---@class WB_SelectWeapon_C:UUserWidget ---@field Button_Close UButton ---@field ScrollBox_List UScrollBox ---@field WB_PID UWB_PID_C --Edit Below-- local WB_SelectWeapon = { bInitDoOnce = false } function WB_SelectWeapon:Construct() self:LuaInit(); end WB_SelectWeapon.SelectWeapons = nil; WB_SelectWeapon.AutoHide = false; WB_SelectWeapon.IntervalTime = 0.5; WB_SelectWeapon.SelectWeaponNames = {}; function WB_SelectWeapon:LuaInit() if self.bInitDoOnce then return ; end self.bInitDoOnce = true; UGCEventSystem.AddListener(EventTypes.AllPlayerKDAChange, self.OnAllPlayerKDAChange, self) UGCEventSystem.AddListener(EventTypes.UpdateCurrWeapon, self.OnUpdateCurrWeapon, self) UGCEventSystem.AddListener(EventTypes.UpdateSelectWeapons, self.OnUpdateSelectWeapons, self) self.WB_PID:LuaInit(); if self.AutoHide then self.Button_Close:SetVisibility(ESlateVisibility.Collapsed); else UITool.BindButtonClicked(self.Button_Close, self.OnClickClose, self); end -- 检测玩家当前有多少武器 UIManager:Register("WB_SelectWeapons", self); UGCLogSystem.Log("[WB_SelectWeapons:Construct] 执行") self.SelectWeaponNames = MiniGameConfig[1].Params.SelectedWeapons; self:FillWeapons(self.SelectWeaponNames); end -- function WB_SelectWeapon:Tick(MyGeometry, InDeltaTime) -- end -- function WB_SelectWeapon:Destruct() -- end WB_SelectWeapon.Weapons = nil; function WB_SelectWeapon:FillWeapons(InList) if self.ScrollBox_List == nil then return; end local WeaponLists = {}; for Name, Count in pairs(InList) do local WeaponID = EnglishNamedWeapon[Name]; if WeaponID then if WeaponLists[Count] == nil then WeaponLists[Count] = {} end table.insert(WeaponLists[Count], WeaponID.ItemId); end end local Weapons = {}; for Count, List in pairs(WeaponLists) do table.insert(Weapons, { Count = Count, List = List, }); end table.sort(Weapons, function(a, b) return a.Count < b.Count; end) UITool.AdaptChildren(self.ScrollBox_List, #Weapons, self:GetListClass()) UITool.ForeachAllChildren(self.ScrollBox_List, function(index, Widget) if Weapons[index] then Widget:Init(self, self.OnClickItem) Widget:SetList(Weapons[index].Count, Weapons[index].List); Widget:SetVisibility(ESlateVisibility.SelfHitTestInvisible); else Widget:SetVisibility(ESlateVisibility.Collapsed); end end); end WB_SelectWeapon.LastKillCount = 0; function WB_SelectWeapon:OnAllPlayerKDAChange(KDAList) if table.isEmpty(KDAList) then return end if self.LastKillCount == LocalKillNum then return; end UITool.ForeachAllChildren(self.ScrollBox_List, function(index, Widget) Widget:SetCurrKill(LocalKillNum); end) self.LastKillCount = LocalKillNum; end function WB_SelectWeapon:OnUpdateSelectWeapons(Weapons) if table.isEmpty(Weapons) then return; end local Weapon = Weapons[LocalPlayerKey] if Weapon == nil then return; end if self.ChildItem == nil then return; end if self.ChildItem:GetItemID() == Weapon then return; end self.ChildItem:SetSelect(false); self.ChildItem = self:FindItemByWeaponId(Weapon); if self.ChildItem then self.ChildItem:SetSelect(true); end end function WB_SelectWeapon:FindItemByWeaponId(ItemId) local ItemWidget = nil; UITool.ForeachAllChildren(self.ScrollBox_List, function(index, Widget) if ItemWidget ~= nil then return; end ItemWidget = Widget:GetItemWidgetByItemID(ItemId); end) return ItemWidget; end WB_SelectWeapon.ChildItem = nil; function WB_SelectWeapon:OnClickItem(ItemID, ItemWid) if ItemWid == self.ChildItem then return; end if self.ChildItem then self.ChildItem:SetSelect(false); end self.ChildItem = ItemWid; self.ChildItem:SetSelect(true); -- 发送 RPC self:OnClickClose(); GameState:SendMiniGameRPC("SelectCurrWeapon", LocalPlayerKey, ItemID); end function WB_SelectWeapon:OnClickClose() WidgetManager:ClosePanel(self.UIType) end WB_SelectWeapon.ListItemClass = nil; WB_SelectWeapon.ItemClass = nil; function WB_SelectWeapon:GetListClass() if self.ListItemClass == nil then self.ListItemClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/SelectWeapons/Child/WB_WeaponList.WB_WeaponList_C')) end return self.ListItemClass; end function WB_SelectWeapon:GetItemClass() if self.ItemClass == nil then self.ItemClass = UE.LoadClass(UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/SelectWeapons/Child/WB_WeaponItem.WB_WeaponItem_C')) end return self.ItemClass; end return WB_SelectWeapon