---@class W_WeaponShop_C:UUserWidget ---@field Shine UWidgetAnimation ---@field Button_BuyProp UButton ---@field Button_BuyWeapon UButton ---@field Button_Close UButton ---@field Button_Save UButton ---@field Button_Select UButton ---@field Button_ShopShow UButton ---@field CanvasPanel_Main UCanvasPanel ---@field HorizontalBox_Props UHorizontalBox ---@field Image_0 UImage ---@field Image_1 UImage ---@field Image_ItemTexBig UImage ---@field Image_ItemTexSmall UImage ---@field Image_Tip1 UImage ---@field Image_Tip2 UImage ---@field TextBlock_ItemName UTextBlock ---@field TextBlock_money UTextBlock ---@field TextBlock_PropPrice UTextBlock ---@field TextBlock_Rewards UTextBlock ---@field TextBlock_Time UTextBlock ---@field TextBlock_WeaponPrice UTextBlock ---@field W_CenterScrollBoxType1 UW_CenterScrollBox_C ---@field W_CenterScrollBoxType2 UW_CenterScrollBox_C ---@field WidgetSwitcher_SelectItemTex UWidgetSwitcher --Edit Below-- ---@type W_WeaponShop_C local W_WeaponShop = { bInitDoOnce = false; -- Select Type1Path = UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/Shop/W_WeaponShopWeaponType.W_WeaponShopWeaponType_C'); Type2Path = UGCGameSystem.GetUGCResourcesFullPath('Asset/UI/Shop/W_WeaponShopWeaponInst.W_WeaponShopWeaponInst_C'); SelectType1 = nil; SelectType2 = nil; SelectItemID= nil; ScrollSoundType = SoundSystem.ESound.Click; SelectItemSoundType = SoundSystem.ESound.Btn; ItemsCol = 3; SelectItemNumRangeMax = 200; SelectItemNumRange = 1; SelectItemNum = 1; }; function W_WeaponShop:Construct() self:LuaInit(); end function W_WeaponShop:OnShowPanel() -- self:ShowHideWidget() if self.LoopUpdateCountHandle == nil then self.LoopUpdateCountHandle = UGCEventSystem.SetTimerLoop(self, self.UpdateItemShowCount, 1.) end end function W_WeaponShop:OnClosePanel() if self.LoopUpdateCountHandle then UGCEventSystem.StopTimer(self.LoopUpdateCountHandle) self.LoopUpdateCountHandle = nil end end function W_WeaponShop:Tick(MyGeometry, InDeltaTime) end function W_WeaponShop:CloseSelf() --if self.CanvasPanel_Main:IsVisible() then -- self.CanvasPanel_Main:SetVisibility(ESlateVisibility.Collapsed) -- self.Button_ShopShow:SetVisibility(ESlateVisibility.Visible) --else -- self.CanvasPanel_Main:SetVisibility(ESlateVisibility.SelfHitTestInvisible) -- self.Button_ShopShow:SetVisibility(ESlateVisibility.Collapsed) --end WidgetManager:ClosePanel(WidgetConfig.EUIType.Shop) end -- function W_WeaponShop:Destruct() -- end -- [Editor Generated Lua] function define Begin: function W_WeaponShop:LuaInit() if self.bInitDoOnce then return; end self.bInitDoOnce = true; --self.Button_Close.OnClicked:Add(self.ShowHideWidget, self) --self.Button_ShopShow.OnClicked:Add(self.ShowHideWidget, self) --self.Button_Select.OnClicked:Add(self.Buy, self) WidgetLibrary.BindButtonClicked(self.Button_Close, self.CloseSelf, self) --WidgetLibrary.BindButtonClicked(self.Button_Select, self.Buy, self) WidgetLibrary.BindButtonClicked(self.Button_BuyWeapon, self.BuyWeapon, self) WidgetLibrary.BindButtonClicked(self.Button_BuyProp, self.BuyParts, self) UGCEventSystem.AddListener(EventEnum.PlayerBuyCallBack, self.ShowBuyCallBack, self) UGCEventSystem.AddListener(EventEnum.PlayerGoldCoinChange, self.UpdateMoney, self) self:InitParam() end function W_WeaponShop:InitParam() self:InitDownLoadIcon() self:InitHorizontalBox_Props() self:UpdateMoney() -- 隔帧初始化 UGCEventSystem.SetTimer(self, function() self.W_CenterScrollBoxType1:Init(UE.LoadClass(self.Type1Path), 70., "InitSelectInfo", "SetSelect", "Button_ItemType") self.W_CenterScrollBoxType2:Init(UE.LoadClass(self.Type2Path), 70., "InitSelectInfo", "SetSelect", "Button_ItemType") self.W_CenterScrollBoxType1:BindUpdateSelectItem(self.UpdateSelectType2Item, self) self.W_CenterScrollBoxType2:BindUpdateSelectItem(self.UpdateSelectItem, self) self:InitType1() end, 0.1 ) end function W_WeaponShop:InitHorizontalBox_Props() for i = 1, self.HorizontalBox_Props:GetChildrenCount() do local Item = self.HorizontalBox_Props:GetChildAt(i - 1) Item:Init(i) end end function W_WeaponShop:InitDownLoadIcon() for _, ItemInfo in pairs(ItemTable.AllItem) do UGCSystemLibrary.LoadAsset(ItemInfo.SmallPic, true) if ItemInfo.BigPic then UGCSystemLibrary.LoadAsset(ItemInfo.BigPic, true) end end end function W_WeaponShop:InitType1() local ItemParams = {} for k, v in pairs(WeaponShopTable.ShopWeaponType) do local ItemParam = {v} ItemParams[#ItemParams + 1] = ItemParam end self.W_CenterScrollBoxType1:UpdateItemInfo(ItemParams) self.W_CenterScrollBoxType1:ScrollToMidItem() end --- 更新二级类Item function W_WeaponShop:UpdateSelectType2Item(SelectItem, SelectIndex) SoundSystem.PlaySound(self.ScrollSoundType) self.SelectType1 = SelectItem:GetItemKey() self:InitType2(self.SelectType1) end function W_WeaponShop:InitType2(Type1Select) local ItemParams = {} UGCLogSystem.Log("[W_WeaponShop_InitType2] Type1Select:%s", tostring(Type1Select)) for k, v in pairs(WeaponShopTable.WeaponShopInfo[Type1Select]) do local ItemParam = {v} ItemParams[#ItemParams + 1] = ItemParam end self.W_CenterScrollBoxType2:UpdateItemInfo(ItemParams) self.W_CenterScrollBoxType2:ScrollToMidItem() UGCLogSystem.Log("[W_WeaponShop_InitType2] Finish") end --- 更新可选择的Item function W_WeaponShop:UpdateSelectItem(SelectItem, SelectIndex) SoundSystem.PlaySound(self.ScrollSoundType) self.SelectType2 = SelectItem:GetItemKey() self:UpdateSelectItemInfo() end function W_WeaponShop:ShowBuyCallBack(bBuySucceed) --local TipStr = (bBuySucceed and "购买成功" or "购买失败") --UGCEventSystem.SendEvent(EventEnum.AddTip, TipStr, 2) UGCWidgetManagerSystem.ShowTipsUI((bBuySucceed and "购买成功" or "金额不足")) end function W_WeaponShop:Buy() SoundSystem.PlaySound(SoundSystem.ESound.Btn) if self.SelectItemID then UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "PlayerBuy", UGCSystemLibrary.GetLocalPlayerKey(), self.SelectItemID, self.SelectItemNum) end end function W_WeaponShop:BuyWeapon() SoundSystem.PlaySound(SoundSystem.ESound.Btn) UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "PlayerBuyWeapon", UGCSystemLibrary.GetLocalPlayerKey(), self.SelectType2, false) end function W_WeaponShop:BuyParts() SoundSystem.PlaySound(SoundSystem.ESound.Btn) UGCSendRPCSystem.ActorRPCNotify(nil, UGCGameSystem.GameState, "PlayerBuyWeapon", UGCSystemLibrary.GetLocalPlayerKey(), self.SelectType2, true) end -------------------------------------------------------- Item Info 右栏目 -------------------------------------------------------- function W_WeaponShop:UpdateSelectItemInfo() local ItemInfo = ItemTable.AllItem[self.SelectType2] self.TextBlock_ItemName:SetText(ItemInfo.Name) self.TextBlock_WeaponPrice:SetText(WeaponShopTable.ItemPrice[self.SelectType2]) self.TextBlock_Rewards:SetText(WeaponShopTable.WeaponKillRewards[self.SelectType2]) if ItemInfo.BigPic then self.Image_ItemTexBig:SetBrushFromTexture(UGCSystemLibrary.LoadAsset(ItemInfo.BigPic, true)) self.WidgetSwitcher_SelectItemTex:SetActiveWidgetIndex(1) else self.Image_ItemTexSmall:SetBrushFromTexture(UGCSystemLibrary.LoadAsset(ItemInfo.SmallPic, true)) self.WidgetSwitcher_SelectItemTex:SetActiveWidgetIndex(0) end local PartIDs = WeaponTable.GetRecommendedWeaponParts(self.SelectType2) self.TextBlock_PropPrice:SetText(WeaponShopTable.GetPropsPrice(PartIDs)) local PartMaps = {} if PartIDs ~= nil then for i, v in pairs(PartIDs) do PartMaps[WeaponTable.GetPartType(v)] = v end end for i = 1, self.HorizontalBox_Props:GetChildrenCount() do local Item = self.HorizontalBox_Props:GetChildAt(i - 1) if PartMaps[i] then Item:SetHasPart(true, PartMaps[i]) else Item:SetHasPart(false) end end -- self:UpdateBuyItemNumRange() end function W_WeaponShop:UpdateMoney() self.TextBlock_money:SetText(tostring(UGCGameSystem.GameState:GetPlayerCoin(UGCSystemLibrary.GetLocalPlayerKey()))) end function W_WeaponShop:UpdateItemShowCount() for i = 1, self.HorizontalBox_Props:GetChildrenCount() do local Item = self.HorizontalBox_Props:GetChildAt(i - 1) Item:UpdateCount() end local WeaponCount = self.W_CenterScrollBoxType2:GetEnableItemNum() for i = 1, WeaponCount do local Item = self.W_CenterScrollBoxType2:GetScrollItem(i - 1) Item:UpdateCount() end end ------------------------------------------------------------------------------------------------------------------------------------------------- function W_WeaponShop:UpdateBuyItemNumRange() local ItemPrice = ItemTable.GetItemPrice(self.SelectItemID) local HasMoney = UGCGameSystem.GameState:GetPlayerCoin(UGCSystemLibrary.GetLocalPlayerKey()) end return W_WeaponShop;