2025-01-04 23:00:19 +08:00
|
|
|
---@class WB_SaveWeaponItem_C:UUserWidget
|
|
|
|
---@field CanvasPanel_SelectPartsPanel UCanvasPanel
|
|
|
|
---@field CanvasPanel_WeaponInfo UCanvasPanel
|
|
|
|
---@field HorizontalBox_Part UHorizontalBox
|
|
|
|
---@field Image_IsSelect UImage
|
|
|
|
---@field Image_WeaponIcon UImage
|
|
|
|
---@field NewButton_Select UNewButton
|
|
|
|
---@field ScrollBox_SelectParts UScrollBox
|
|
|
|
---@field TextBlock_WeaponName UTextBlock
|
|
|
|
--Edit Below--
|
|
|
|
local WB_SaveWeaponItem = {
|
2025-01-21 16:14:19 +08:00
|
|
|
bInitDoOnce = false;
|
|
|
|
PartTypeToPartItem = {};
|
|
|
|
IsSelected = false;
|
2025-01-04 23:00:19 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
--[==[ Construct
|
|
|
|
function WB_SaveWeaponItem:Construct()
|
|
|
|
|
|
|
|
end
|
|
|
|
-- Construct ]==]
|
|
|
|
|
|
|
|
-- function WB_SaveWeaponItem:Tick(MyGeometry, InDeltaTime)
|
|
|
|
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- function WB_SaveWeaponItem:Destruct()
|
|
|
|
|
|
|
|
-- end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:LuaInit()
|
|
|
|
if self.bInitDoOnce then
|
2025-01-21 16:14:19 +08:00
|
|
|
return ;
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
self.bInitDoOnce = true;
|
|
|
|
WidgetLibrary.BindButtonClicked(self.NewButton_Select, self.ClickSelect, self)
|
2025-01-21 16:14:19 +08:00
|
|
|
|
|
|
|
-- 设置配件类型
|
|
|
|
for i = 1, self.HorizontalBox_Part:GetChildrenCount() do
|
|
|
|
local Item = self.HorizontalBox_Part:GetChildAt(i - 1)
|
|
|
|
Item:LuaInit()
|
|
|
|
Item:SetPartType(PartTypeDisplayOrder[i])
|
|
|
|
Item:BindSelectCallBack(self.ClickPart, self)
|
|
|
|
if PartTypeDisplayOrder[i] then
|
|
|
|
self.PartTypeToPartItem[PartTypeDisplayOrder[i]] = Item
|
|
|
|
end
|
|
|
|
end
|
|
|
|
for i = 1, self.ScrollBox_SelectParts:GetChildrenCount() do
|
|
|
|
local Item = self.ScrollBox_SelectParts:GetChildAt(i - 1)
|
|
|
|
Item:LuaInit()
|
|
|
|
Item:SetSelectStyle(1)
|
|
|
|
Item:BindSelectCallBack(self.ClickSelectPart, self)
|
|
|
|
end
|
|
|
|
|
|
|
|
UGCEventSystem.AddListener(EventTypes.UpdateWeapons, self.OnUpdateWeapons, self)
|
|
|
|
end
|
2025-01-04 23:00:19 +08:00
|
|
|
|
2025-01-21 16:14:19 +08:00
|
|
|
function WB_SaveWeaponItem:OnUpdateWeapons(WeaponID)
|
|
|
|
UGCLogSystem.Log("[WB_SaveWeaponItem:OnUpdateWeapons] WeaponID = %d", WeaponID);
|
|
|
|
self:SetWeaponID(self.WeaponID);
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:SetIndex(InIndex)
|
2025-01-21 16:14:19 +08:00
|
|
|
self.Index = InIndex
|
|
|
|
self:LuaInit()
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:GetIndex()
|
2025-01-21 16:14:19 +08:00
|
|
|
return self.Index
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:BindClickSelect(Func, Obj)
|
2025-01-21 16:14:19 +08:00
|
|
|
self.SelectCallBackFunc = Func
|
|
|
|
self.SelectCallBackObj = Obj
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:ClickSelect()
|
2025-01-21 16:14:19 +08:00
|
|
|
-- UGCLogSystem.Log("[WB_BuffSelectItem_ClickSelect]")
|
|
|
|
if self.SelectCallBackFunc then
|
|
|
|
if self.SelectCallBackObj then
|
|
|
|
self.SelectCallBackFunc(self.SelectCallBackObj, self:GetIndex())
|
|
|
|
else
|
|
|
|
self.SelectCallBackFunc(self:GetIndex())
|
|
|
|
end
|
|
|
|
end
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:SetSelect(IsSelect)
|
2025-01-21 16:14:19 +08:00
|
|
|
if self.IsSelected ~= IsSelect then
|
|
|
|
self.IsSelected = IsSelect
|
|
|
|
if IsSelect then
|
|
|
|
self.Image_IsSelect:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|
|
|
--self.CanvasPanel_SelectPartsPanel:SetVisibility(ESlateVisibility.SelfHitTestInvisible);
|
|
|
|
else
|
|
|
|
self.Image_IsSelect:SetVisibility(ESlateVisibility.Collapsed);
|
|
|
|
--self.CanvasPanel_SelectPartsPanel:SetVisibility(ESlateVisibility.Collapsed);
|
|
|
|
-- self:SetSelectPartType(nil)
|
|
|
|
end
|
|
|
|
end
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:GetWeaponID()
|
2025-01-21 16:14:19 +08:00
|
|
|
return self.WeaponID
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:SetWeaponID(WeaponID)
|
2025-01-21 16:14:19 +08:00
|
|
|
self.WeaponID = WeaponID
|
|
|
|
local WeaponParts = MyWeaponSystem.GetWeaponBastParts(self.WeaponID)
|
|
|
|
-- 在这里修改 获取存档中的武器配件存档 CustomWeaponParts = {[WeaponID] = {PartID, PartID, PartID, ...}, ...}
|
|
|
|
-- local CustomWeaponParts = ArchiveDataConfig.GetPlayerArchiveDataFromType(UGCSystemLibrary.GetLocalPlayerKey(), ArchiveDataConfig.EArchiveType.CustomWeaponParts)
|
|
|
|
local CustomWeaponParts = nil
|
|
|
|
if not table.isEmpty(ArchiveTable[LocalPlayerKey]) then
|
|
|
|
CustomWeaponParts = ArchiveTable[LocalPlayerKey].Weapons
|
|
|
|
end
|
|
|
|
|
|
|
|
if CustomWeaponParts and CustomWeaponParts[self.WeaponID] then
|
|
|
|
WeaponParts = CustomWeaponParts[self.WeaponID]
|
|
|
|
end
|
|
|
|
local WeaponPartsMap = MyWeaponSystem.PartListToPartMap(WeaponParts)
|
|
|
|
if WeaponSuits[WeaponID] then
|
|
|
|
for i, v in pairs(WeaponSuits[WeaponID]) do
|
|
|
|
if WeaponPartsMap[i] == nil then WeaponPartsMap[i] = 0 end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
local UpdateSelectPartsOnce = false
|
|
|
|
for i = 1, self.HorizontalBox_Part:GetChildrenCount() do
|
|
|
|
local Item = self.HorizontalBox_Part:GetChildAt(i - 1)
|
|
|
|
local PartType = Item:GetPartType()
|
|
|
|
local ItemID = WeaponPartsMap[PartType]
|
|
|
|
Item:SetItemID(ItemID)
|
|
|
|
-- 设置当前默认选择的Part
|
|
|
|
if ItemID and not UpdateSelectPartsOnce then
|
|
|
|
UpdateSelectPartsOnce = true
|
|
|
|
self:SetSelectPartType(PartType)
|
2025-01-18 23:19:35 +08:00
|
|
|
end
|
2025-01-21 16:14:19 +08:00
|
|
|
end
|
|
|
|
if not UpdateSelectPartsOnce then
|
|
|
|
self:SetSelectPartType(nil)
|
|
|
|
end
|
|
|
|
|
|
|
|
MyWeaponSystem.AsyncLoadItemBigIconToBrush(self.WeaponID, self.Image_WeaponIcon)
|
|
|
|
self.TextBlock_WeaponName:SetText(MyWeaponSystem.GetItemName(self.WeaponID))
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:SetVisWeaponInfo(IsVis)
|
2025-01-21 16:14:19 +08:00
|
|
|
if IsVis then
|
|
|
|
self.CanvasPanel_WeaponInfo:SetVisibility(ESlateVisibility.HitTestInvisible)
|
|
|
|
else
|
|
|
|
self.CanvasPanel_WeaponInfo:SetVisibility(ESlateVisibility.Hidden)
|
|
|
|
end
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:ClickPart(PartID)
|
2025-01-21 16:14:19 +08:00
|
|
|
if self.IsSelected then
|
|
|
|
local PartType = MyWeaponSystem.GetPartType(PartID)
|
|
|
|
self:SetSelectPartType(PartType)
|
|
|
|
else
|
|
|
|
self:ClickSelect()
|
|
|
|
end
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
--- 设置选择修改的类型
|
|
|
|
function WB_SaveWeaponItem:SetSelectPartType(InPartType)
|
2025-01-21 16:14:19 +08:00
|
|
|
UGCLogSystem.Log("[WB_SaveWeaponItem_SetSelectPartType] InPartType:%s", tostring(InPartType))
|
|
|
|
self.SelectPartType = InPartType
|
|
|
|
local ItemID = -1
|
|
|
|
if self.PartTypeToPartItem[InPartType] then
|
|
|
|
ItemID = self.PartTypeToPartItem[InPartType]:GetItemID()
|
|
|
|
end
|
|
|
|
local Parts = MyWeaponSystem.GetWeaponCanUsePartFromPartType(self.WeaponID, InPartType)
|
|
|
|
for i = 1, self.ScrollBox_SelectParts:GetChildrenCount() do
|
|
|
|
local Item = self.ScrollBox_SelectParts:GetChildAt(i - 1)
|
|
|
|
Item:SetItemID(Parts[i])
|
|
|
|
--Item:SetIsSelect(ItemID == Parts[i])
|
|
|
|
end
|
|
|
|
for i = 1, self.HorizontalBox_Part:GetChildrenCount() do
|
|
|
|
local Item = self.HorizontalBox_Part:GetChildAt(i - 1)
|
|
|
|
--Item:SetIsSelect(InPartType == Item:GetPartType())
|
|
|
|
end
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
--- 修改显示的配件
|
|
|
|
function WB_SaveWeaponItem:ClickSelectPart(PartID)
|
2025-01-21 16:14:19 +08:00
|
|
|
UGCLogSystem.Log("[WB_SaveWeaponItem_ClickSelectPart] PartID:%s", tostring(PartID))
|
|
|
|
local PartType = MyWeaponSystem.GetPartType(PartID)
|
|
|
|
local PartItem = self.PartTypeToPartItem[PartType]
|
|
|
|
if PartItem then
|
|
|
|
PartItem:SetItemID(PartID)
|
|
|
|
-- 设置已选择
|
|
|
|
for i = 1, self.ScrollBox_SelectParts:GetChildrenCount() do
|
|
|
|
local Item = self.ScrollBox_SelectParts:GetChildAt(i - 1)
|
|
|
|
--Item:SetIsSelect(PartID == Item:GetItemID())
|
|
|
|
end
|
|
|
|
end
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
--- 获取当前修改后的配件信息
|
|
|
|
function WB_SaveWeaponItem:GetAllParts()
|
2025-01-21 16:14:19 +08:00
|
|
|
local Res = {}
|
|
|
|
for i = 1, self.HorizontalBox_Part:GetChildrenCount() do
|
|
|
|
local Item = self.HorizontalBox_Part:GetChildAt(i - 1)
|
|
|
|
local ItemID = Item:GetItemID()
|
|
|
|
if ItemID and MyWeaponSystem.IsWeaponPartValid(ItemID) then
|
|
|
|
Res[#Res + 1] = ItemID
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return Res
|
2025-01-04 23:00:19 +08:00
|
|
|
end
|
|
|
|
|
2025-01-18 21:26:02 +08:00
|
|
|
function WB_SaveWeaponItem:SetWeaponSocketType(InSocketType)
|
2025-01-21 16:14:19 +08:00
|
|
|
self.WeaponSocketType = InSocketType
|
2025-01-18 21:26:02 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
function WB_SaveWeaponItem:GetWeaponSocketType()
|
2025-01-21 16:14:19 +08:00
|
|
|
return self.WeaponSocketType
|
2025-01-18 21:26:02 +08:00
|
|
|
end
|
|
|
|
|
2025-01-04 23:00:19 +08:00
|
|
|
return WB_SaveWeaponItem;
|