118 lines
3.7 KiB
Lua
118 lines
3.7 KiB
Lua
|
---@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<int32, WB_AllWeapon_Item_C>
|
||
|
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;
|