---@class WB_SelectAllWeapon_C:UUserWidget ---@field ScrollBox_Types UScrollBox ---@field TextBlock_CountDown UTextBlock --Edit Below-- ---@type WB_SelectAllWeapon_C local WB_SelectAllWeapon = { bInitDoOnce = false; }; WB_SelectAllWeapon.TypeItems = {}; ---@type table WB_SelectAllWeapon.CurrSelectItems = {}; --- 玩家武器最多限制 WB_SelectAllWeapon.WeaponLimitCount = 8; function WB_SelectAllWeapon:Construct() UGCEventSystem.AddListener(EventTypes.UpdateSelectWeapons, self.OnUpdateSelectWeapons, self) UGCEventSystem.AddListener(EventTypes.CountDownTimeChange, self.OnCountDownChange, self) if table.isEmpty(WeaponIdTable) then GetWeaponIdTable(); end end function WB_SelectAllWeapon:OnShowPanel(...) local vars = {...}; -- 检查一下可以使用的类型 local WeaponTypes = {}; for i, v in pairs(WeaponIdTable) do local Info = WeaponTable[v]; if WeaponTypes[Info.TypeNew] == nil then WeaponTypes[Info.TypeNew] = {}; end table.insert(WeaponTypes[Info.TypeNew], v); end local TypeList = {}; for i, v in pairs(WeaponTypes) do table.insert(TypeList, { Type = i; List = v; }) end table.sort(TypeList, function(a, b) return a.Type < b.Type; end); ObjectPath.AddFunc("WB_AllWeapon_Type", function(TargetClass) UGCLogSystem.Log("[WB_SelectAllWeapon:OnShowPanel] 执行"); UITool.AdaptChildren(self.ScrollBox_Types, table.getCount(TypeList), TargetClass); UITool.ForeachAllChildren(self.ScrollBox_Types, function(index, Widget) Widget:Init(self, self.OnClickItem) Widget:SetType(TypeList[index].Type, TypeList[index].List); self.TypeItems[TypeList[index].Type] = Widget; end); end) end ---@param InItemId int32 物品 ID function WB_SelectAllWeapon:GetWeaponItemByItemId(InItemId) for i = 1, UITool.GetChildrenCount(self.ScrollBox_Types) do local Item = UITool.GetChildAt(self.ScrollBox_Types, i - 1); if Item:GetType() == WeaponTable[InItemId].TypeNew then return Item:GetItemByWeaponId(InItemId); end end return nil; end function WB_SelectAllWeapon:OnUpdateSelectWeapons(InList) if table.isEmpty(InList) then return; end if table.isEmpty(InList[LocalPlayerKey]) then return; end UGCLogSystem.LogTree(string.format("[WB_SelectAllWeapon:OnUpdateSelectWeapons] InList ="), InList) -- 让所有的都设置为非选择 self:SetAllNoSelect(); for i, v in pairs(InList[LocalPlayerKey]) do -- 获取类型 local Item = self:GetWeaponItemByItemId(v) if Item ~= nil and UE.IsValid(Item) then Item:SetSelect(true); end end end function WB_SelectAllWeapon:SetAllNoSelect() UITool.ForeachAllChildren(self.ScrollBox_Types, function(index, Widget) Widget:SetAllNoSelect(); end); end --- 倒计时 ---@param InTime int function WB_SelectAllWeapon:OnCountDownChange(InTime) self.TextBlock_CountDown:SetText(tostring(InTime) .. 's'); end -- function WB_SelectAllWeapon:Tick(MyGeometry, InDeltaTime) -- end -- function WB_SelectAllWeapon:Destruct() -- end ---@param InItem WB_AllWeapon_Item_C function WB_SelectAllWeapon:OnClickItem(InItem) local ItemId = InItem:GetItemId() if self.CurrSelectItems[ItemId] == nil then -- 判断当前是否存在 if table.getCount(self.CurrSelectItems) < self.WeaponLimitCount then self.CurrSelectItems[ItemId] = InItem; InItem:SetSelect(true); -- 发送 RPC GameState:SendMiniGameRPC("OnSelectWeapons", LocalPlayerKey, ItemId, true); else -- 提示当前无法添加了 UGCWidgetManagerSystem.ShowTipsUI(string.format('当前已经添加到上限了,请取消已选择的再进行添加~')); end else self.CurrSelectItems[ItemId]:SetSelect(false) GameState:SendMiniGameRPC("OnSelectWeapons", LocalPlayerKey, ItemId, false); self.CurrSelectItems[ItemId] = nil; end end return WB_SelectAllWeapon;