164 lines
4.7 KiB
Lua
164 lines
4.7 KiB
Lua
---@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.SelfKill, self.OnSelfKill, 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 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:OnSelfKill(Kills)
|
|
UGCLogSystem.Log("[WB_SelectWeapon:OnSelfKill] Kills = %d", Kills);
|
|
UGCEventSystem.SetTimer(self, function()
|
|
if LocalKillNum1 > LocalKillNum then
|
|
LocalKillNum = LocalKillNum1;
|
|
self:OnAllPlayerKDAChange();
|
|
else
|
|
LocalKillNum1 = LocalKillNum;
|
|
end
|
|
end, 0.5)
|
|
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 |