UGCProjects/InfFire/Script/UI/SelectWeapons/WB_SelectWeapon.lua
2025-01-04 23:00:19 +08:00

152 lines
4.3 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.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