UGCProjects/GZJ/Script/UI/ChildWidgets/WBP_BagWeaponItem.lua
2025-01-08 22:46:12 +08:00

189 lines
5.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---@class WBP_BagWeaponItem_C:UUserWidget
---@field Button_Reset UButton
---@field CanvasPanel_Fittings UCanvasPanel
---@field Image_WeaponIcon UImage
---@field TextBlock_Desc UTextBlock
---@field TextBlock_WeaponName UTextBlock
--Edit Below--
local WBP_BagWeaponItem = {
bInitDoOnce = false;
WeaponItem = nil,
WeaponItemId = 0, -- 武器Id
Fittings = {},
WeaponComponent = nil,
bHasConstruct = false,
};
function WBP_BagWeaponItem:Construct()
self.SuperClass:Construct()
print(string.format("[WBP_BagWeaponItem:Construct] 构造好了"))
self.bHasConstruct = true
print(string.format("[WBP_BagWeaponItem:Construct] 设置好了"))
self:InitData()
end
function WBP_BagWeaponItem:GetHasConstruct()
return self.bHasConstruct
end
-- 初始化
function WBP_BagWeaponItem:InitData()
print(string.format("[WBP_BagWeaponItem:InitData] 初始化数据"))
-- 在开始的时候把它们全部隐藏
for i = 1, 5 do
self.CanvasPanel_Fittings:GetChildAt(i - 1).Image_Icon:SetVisibility(ESlateVisibility.Collapsed)
--再给他们设置 ItemType
self.CanvasPanel_Fittings:GetChildAt(i - 1).FittingItemType = i - 1
end
self.Button_Reset.OnClicked:Add(WBP_BagWeaponItem.OnClickResetWeapon, self)
end
function WBP_BagWeaponItem:GetFittingItemByItemType(InItemType)
return self.CanvasPanel_Fittings:GetChildAt(InItemType)
end
-- function WBP_BagWeaponItem:Tick(MyGeometry, InDeltaTime)
-- end
-- function WBP_BagWeaponItem:Destruct()
-- end
function WBP_BagWeaponItem:OnMouseButtonDown(MyGeometry, PointerEvent)
self.SuperClass:OnMouseButtonDown(MyGeometry, PointerEvent)
-- local PlayerController = STExtraGameplayStatics.GetFirstPlayerController(self)
-- UnrealNetwork.CallUnrealRPC(PlayerController, PlayerController, "ServerRPC_ChangeCurrentWeaponId", self.WeaponItemId)
end
function WBP_BagWeaponItem:OnMouseButtonUp(MyGeometry, InTouchEvent)
self.SuperClass:OnMouseButtonUp(MyGeometry, InTouchEvent)
end
function WBP_BagWeaponItem:OnFocusLost(InFocusEvent)
return WBP_BagWeaponItem.SuperClass:OnFocusLost(InFocusEvent)
end
-- 当拖拽到该元素上的时候,并释放的时候
function WBP_BagWeaponItem:OnDrop(MyGeometry, PointerEvent, Operation)
local Data = Operation:GetItemData()
if Data == nil then
print(string.format("[WBP_BagWeaponItem:OnDrop] 有问题,请检查一下"))
return
end
self:SetDragData(Data)
self.SuperClass:OnDrop(MyGeometry, PointerEvent, Operation)
end
-- 数据类型 {ItemID, 1} -- 数量为1
function WBP_BagWeaponItem:SetDragData(InData)
self:AddFittingItem(InData.ItemID)
end
-- 这是客户端设置武器
function WBP_BagWeaponItem:SetWeaponId(InId, bIsNewAdd)
self.WeaponItemId = InId
local Data = GameDataManager.GetWeaponConstructDataByID(InId)
if Data == nil then
UE.Log("[WBP_BagWeaponItem:SetWeaponId] Data is nil")
return
end
if Data.Icon ~= nil then
self.Image_WeaponIcon:SetBrushFromTexture(Data.Icon)
end
self.TextBlock_WeaponName:SetText(Tables.WeaponClassTypeDesc[Data.WeaponType][1])
self.TextBlock_Desc:SetText(DropItemMap.WeaponTable[Data.WeaponType].Text)
-- 从武器组件中读取对应数据
self:RefreshFittings()
end
function WBP_BagWeaponItem:GetWeaponComponent()
local PlayerController = STExtraGameplayStatics.GetFirstPlayerController(self)
if PlayerController then
local OwningPawn = PlayerController:GetPlayerCharacterSafety()
if OwningPawn then
local WC = OwningPawn:GetWeaponComponent()
if WC ~= nil and UE.IsValid(WC) then
self.WeaponComponent = WC
end
end
end
end
function WBP_BagWeaponItem:RefreshFittings()
local PlayerState = GameDataManager.GetLocalPlayerState()
if PlayerState == nil then
print(string.format("[WBP_BagWeaponItem:RefreshFittings] 没有 PlayerState请检查一下"))
return
end
print(string.format("[WBP_BagWeaponItem:RefreshFittings] 当前的Id = %d", self.WeaponItemId))
local Val = PlayerState:GetWeaponFittingsById(self.WeaponItemId)
self.Fittings = TableHelper.DeepCopyTable(Val)
self:SetFittingList(self.Fittings)
end
function WBP_BagWeaponItem:SetFittingList(InDataArr)
print(string.format("[WBP_BagWeaponItem:SetFittingList] 开始设置 Fitting List"))
self:HideFittingList()
-- 注意,从左往右依次是
for i = 1, #InDataArr do
local ItemId = InDataArr[i]
self:SetFittingItem(ItemId)
end
end
function WBP_BagWeaponItem:HideFittingList()
for i = 1, 5 do
self.CanvasPanel_Fittings:GetChildAt(i - 1):SetItemHidden()
end
end
function WBP_BagWeaponItem:AddFittingItem(InItemId)
print(string.format("[WBP_BagWeaponItem:AddFittingItem] 开始添加配件 %d", InItemId))
local PC = STExtraGameplayStatics.GetFirstPlayerController(self)
UnrealNetwork.CallUnrealRPC(PC, PC, "ServerRPC_AddFittingItem", self.WeaponItemId, InItemId)
end
function WBP_BagWeaponItem:SetFittingItem(InItemId)
local ItemType = GetItemTypeByItemId(InItemId)
local Icon = GameDataManager.GetItemInfoByItemID(InItemId).Icon
self.CanvasPanel_Fittings:GetChildAt(ItemType):SetItemIcon(Icon)
self.CanvasPanel_Fittings:GetChildAt(ItemType):SetItemBGColor(GetItemQualityLevel(InItemId))
self.CanvasPanel_Fittings:GetChildAt(ItemType):SetVisibility(ESlateVisibility.Visible)
end
function WBP_BagWeaponItem:RemoveFittingItem(InItemId)
local ItemType = GetItemTypeByItemId(InItemId)
self.CanvasPanel_Fittings:GetChildAt(ItemType):SetVisibility(ESlateVisibility.Collapsed)
end
function WBP_BagWeaponItem:OnClickResetWeapon()
--首先判断有没有足够的石头
local PC = GameDataManager.GetLocalPlayerController()
local Items = PC.ItemMap[EItemType.ScouringStone]
local bFindStone = false
local Count = 0
if Items ~= nil then
for _, v in pairs(Items) do
Count = Count + v
end
end
if Count > 0 then
bFindStone = true
end
if not bFindStone then
UIManager:ShowGeneralNotice("没有足够多的重铸石")
return
end
local PC = GameDataManager.GetLocalPlayerController()
UnrealNetwork.CallUnrealRPC(PC, PC, "ServerRPC_ResetWeapon", self.WeaponItemId)
end
return WBP_BagWeaponItem;