forked from endernon/PGRData
328 lines
No EOL
13 KiB
Lua
328 lines
No EOL
13 KiB
Lua
---@class XGoldenMinerShopGrid
|
|
local XUiShopGrid = XClass(nil, "XUiShopGrid")
|
|
|
|
function XUiShopGrid:Ctor(ui, rootUi, buyCb)
|
|
self.GameObject = ui.gameObject
|
|
self.Transform = ui.transform
|
|
self.RootUi = rootUi
|
|
self.BuyCallback = buyCb
|
|
XTool.InitUiObject(self)
|
|
|
|
self.DataDb = XDataCenter.GoldenMinerManager.GetGoldenMinerDataDb()
|
|
self:InitBuff()
|
|
self:Init()
|
|
self:AddListener()
|
|
end
|
|
|
|
--region Data - Init
|
|
function XUiShopGrid:InitBuff()
|
|
local percent = XGoldenMinerConfigs.Percent
|
|
local ownBuffDic = XDataCenter.GoldenMinerManager.GetOwnBuffDic()
|
|
--飞船升级打折
|
|
local buffList = ownBuffDic[XGoldenMinerConfigs.BuffType.GoldenMinerSkipDiscount]
|
|
local skipDiscount = buffList and buffList[1]
|
|
self.SkipDiscount = skipDiscount and skipDiscount / percent or 1
|
|
--购买道具打折
|
|
buffList = ownBuffDic[XGoldenMinerConfigs.BuffType.GoldenMinerShopDiscount]
|
|
local shopDiscount = buffList and buffList[1]
|
|
self.ShopDiscount = shopDiscount and shopDiscount / percent or 1
|
|
end
|
|
--endregion
|
|
|
|
--region Ui - ObjInit
|
|
function XUiShopGrid:Init()
|
|
local gridTransform = self.GridCommon.transform
|
|
local imgQuality = XUiHelper.TryGetComponent(gridTransform, "ImgQuality")
|
|
local panelTxt = XUiHelper.TryGetComponent(gridTransform, "PanelTxt")
|
|
imgQuality.gameObject:SetActiveEx(false)
|
|
panelTxt.gameObject:SetActiveEx(false)
|
|
self.TxtLock.text = ""
|
|
self.ItemRImgIcon = XUiHelper.TryGetComponent(gridTransform, "RImgIcon", "RawImage")
|
|
self.TxtName = XUiHelper.TryGetComponent(gridTransform, "TxtName", "Text")
|
|
if self.DiscountTag then
|
|
self.DiscountTag.gameObject:SetActiveEx(false)
|
|
end
|
|
end
|
|
--endregion
|
|
|
|
--region Ui - Refresh
|
|
---@param itemId number GoldenMinerItem表的Id
|
|
---@param upgradeLocalId number GoldenMinerUpgradeLocal表的Id
|
|
function XUiShopGrid:Refresh(itemId, upgradeLocalId, index)
|
|
self.ItemId = itemId
|
|
self.UpgradeLocalId = upgradeLocalId
|
|
self.UpgradeId = XGoldenMinerConfigs.GetUpgradeId(upgradeLocalId)
|
|
self.Index = index
|
|
|
|
self:UpdateCommon()
|
|
|
|
if upgradeLocalId then
|
|
self:UpdateUpgrade()
|
|
else
|
|
self:UpdateItem()
|
|
end
|
|
end
|
|
|
|
function XUiShopGrid:RefreshPriceColor(prices)
|
|
local isCanBuy = prices and prices <= self.DataDb:GetStageScores()
|
|
self.TxtNewPrice.color = XGoldenMinerConfigs.GetShopItemPriceColor(isCanBuy)
|
|
end
|
|
|
|
function XUiShopGrid:UpdateCommon()
|
|
local scoreIcon = XGoldenMinerConfigs.GetScoreIcon()
|
|
self.RImgPrice:SetRawImage(scoreIcon)
|
|
self.RImgPrice.gameObject:SetActiveEx(true)
|
|
self.ImgLock.gameObject:SetActiveEx(false)
|
|
self.DiscountTag.gameObject:SetActiveEx(false)
|
|
self.PanelPrice1.gameObject:SetActiveEx(true)
|
|
self.TextSellOut.text = XGoldenMinerConfigs.GetShopUpgradeBuyTxt(false)
|
|
self.ImgSellOut.gameObject:SetActiveEx(false)
|
|
if self.PanelFulllevel then
|
|
self.PanelFulllevel.gameObject:SetActiveEx(false)
|
|
self.PanelInuse.gameObject:SetActiveEx(false)
|
|
self.PanelReplace.gameObject:SetActiveEx(false)
|
|
end
|
|
end
|
|
--endregion
|
|
|
|
--region Ui - ItemGrid
|
|
---刷新道具
|
|
function XUiShopGrid:UpdateItem()
|
|
local itemId = self.ItemId
|
|
if not XTool.IsNumberValid(itemId) then
|
|
self.ImgLock.gameObject:SetActiveEx(true)
|
|
return
|
|
end
|
|
|
|
local index = self.Index
|
|
local isBuy = self.DataDb:IsItemAlreadyBuy(index)
|
|
-- 价格&折扣
|
|
local goldenMinerCommodityDb = self.DataDb:GetMinerShopDbByIndex(index)
|
|
local originPrices = goldenMinerCommodityDb:GetPrices()
|
|
local prices = originPrices and math.ceil(originPrices * self.ShopDiscount)
|
|
self.TxtNewPrice.text = prices or ""
|
|
self.TxtSaleRate.text = originPrices or ""
|
|
self.TxtSaleRate.gameObject:SetActiveEx(prices ~= originPrices)
|
|
if self.DiscountTag and self.ShopDiscount ~= 1 then
|
|
self.DiscountTag.gameObject:SetActiveEx(not isBuy)
|
|
self.TxtDiscountTag.text = (math.floor(self.ShopDiscount * 100)) .. XUiHelper.GetText("JPSnap")
|
|
end
|
|
|
|
local icon = XGoldenMinerConfigs.GetItemIcon(itemId)
|
|
self.ItemRImgIcon:SetRawImage(icon)
|
|
|
|
self.TxtName.text = XGoldenMinerConfigs.GetItemName(itemId)
|
|
self.TxtLimitLable.text = XGoldenMinerConfigs.GetItemDescribe(itemId)
|
|
self.ImgSellOut.gameObject:SetActiveEx(isBuy)
|
|
self.PanelLevel.gameObject:SetActiveEx(false)
|
|
|
|
self:RefreshPriceColor(prices)
|
|
end
|
|
--endregion
|
|
|
|
--region Ui - UpgradeGrid
|
|
---刷新飞碟升级项
|
|
function XUiShopGrid:UpdateUpgrade()
|
|
local upgradeId = self.UpgradeId
|
|
local upgradeLocalId = self.UpgradeLocalId
|
|
local upgradeStrengthen = self.DataDb:GetUpgradeStrengthen(upgradeId)
|
|
self.CurClientLevelIndex = upgradeStrengthen:GetClientLevelIndex(upgradeId)
|
|
self.CurLevelIndex = upgradeStrengthen:GetLevelIndex(upgradeId)
|
|
|
|
-- 升级介绍
|
|
self.TxtName.text = XGoldenMinerConfigs.GetUpgradeLocalName(upgradeLocalId)
|
|
self.TxtLimitLable.text = XGoldenMinerConfigs.GetUpgradeLocalDescribe(upgradeLocalId)
|
|
-- 升级图标
|
|
local icon = XGoldenMinerConfigs.GetUpgradeLocalIcon(upgradeLocalId)
|
|
self.ItemRImgIcon:SetRawImage(icon)
|
|
|
|
local type = XGoldenMinerConfigs.GetUpgradeType(upgradeId)
|
|
self.TextSellOut.text = XGoldenMinerConfigs.GetShopUpgradeBuyTxt(type == XGoldenMinerConfigs.UpgradeType.SameReplace)
|
|
if type == XGoldenMinerConfigs.UpgradeType.Level then
|
|
self:_UpdateUpgradeLevel(upgradeId)
|
|
elseif type == XGoldenMinerConfigs.UpgradeType.SameBuy then
|
|
self:_UpdateUpgradeSameBuy(upgradeId, upgradeLocalId)
|
|
elseif type == XGoldenMinerConfigs.UpgradeType.SameReplace then
|
|
self:_UpdateUpgradeSameReplace(upgradeId, upgradeLocalId)
|
|
end
|
|
end
|
|
|
|
function XUiShopGrid:_UpdateUpgradeLevel(upgradeId)
|
|
local upgradeStrengthen = self.DataDb:GetUpgradeStrengthen(upgradeId)
|
|
local nextLevelIndex = upgradeStrengthen:GetNextClientLevelIndex()
|
|
local originPrices = XGoldenMinerConfigs.GetUpgradeCosts(upgradeId, nextLevelIndex)
|
|
local prices = originPrices and math.ceil(originPrices * self.SkipDiscount)
|
|
local isCanUpgrade = originPrices and true or false
|
|
self.TxtNewPrice.text = prices or ""
|
|
self.TxtSaleRate.text = originPrices or ""
|
|
self.TextLevel.text = isCanUpgrade and XUiHelper.GetText("GoldenMinerShopTextLv", self.CurClientLevelIndex, nextLevelIndex)
|
|
or XUiHelper.GetText("GoldenMinerAlreadyMaxLv")
|
|
self.TxtSaleRate.gameObject:SetActiveEx(prices ~= originPrices)
|
|
self.RImgPrice.gameObject:SetActiveEx(isCanUpgrade)
|
|
self.PanelLevel.gameObject:SetActiveEx(isCanUpgrade)
|
|
if self.PanelFulllevel then
|
|
self.PanelFulllevel.gameObject:SetActiveEx(not isCanUpgrade)
|
|
end
|
|
-- 折扣
|
|
if self.DiscountTag and self.SkipDiscount ~= 1 then
|
|
self.DiscountTag.gameObject:SetActiveEx(isCanUpgrade)
|
|
self.TxtDiscountTag.text = (math.floor(self.SkipDiscount * 100)) .. XUiHelper.GetText("JPSnap")
|
|
end
|
|
|
|
self:RefreshPriceColor(prices)
|
|
end
|
|
|
|
---有类型区分的飞碟特殊刷新
|
|
function XUiShopGrid:_UpdateUpgradeSameBuy(upgradeId, upgradeLocalId)
|
|
local indexConfig = XGoldenMinerConfigs.GetUpgradeLocalIdIndex(upgradeId, upgradeLocalId)
|
|
local originPrices = XGoldenMinerConfigs.GetUpgradeCosts(upgradeId, indexConfig)
|
|
local prices = originPrices and math.ceil(originPrices * self.SkipDiscount)
|
|
local levelIndexServer = indexConfig - 1
|
|
local curLevelIndex = self.CurLevelIndex
|
|
local isCanUpgrade = curLevelIndex ~= levelIndexServer
|
|
|
|
self.CurClientLevelIndex = levelIndexServer
|
|
self.TxtNewPrice.text = isCanUpgrade and prices or ""
|
|
self.TxtSaleRate.text = isCanUpgrade and originPrices or ""
|
|
self.RImgPrice.gameObject:SetActiveEx(isCanUpgrade)
|
|
self.ImgSellOut.gameObject:SetActiveEx(not isCanUpgrade)
|
|
self.PanelLevel.gameObject:SetActiveEx(false)
|
|
self.TxtSaleRate.gameObject:SetActiveEx(prices ~= originPrices)-- 折扣
|
|
if self.DiscountTag and self.SkipDiscount ~= 1 then
|
|
self.DiscountTag.gameObject:SetActiveEx(isCanUpgrade)
|
|
self.TxtDiscountTag.text = (math.floor(self.SkipDiscount * 100)) .. XUiHelper.GetText("JPSnap")
|
|
end
|
|
|
|
self:RefreshPriceColor(prices)
|
|
end
|
|
|
|
function XUiShopGrid:_UpdateUpgradeSameReplace(upgradeId, upgradeLocalId)
|
|
local upgradeStrengthen = self.DataDb:GetUpgradeStrengthen(upgradeId)
|
|
local indexConfig = XGoldenMinerConfigs.GetUpgradeLocalIdIndex(upgradeId, upgradeLocalId)
|
|
local levelIndexServer = indexConfig - 1
|
|
local curLevelIndex = self.CurLevelIndex
|
|
local isCanUpgrade = curLevelIndex ~= levelIndexServer
|
|
local originPrices = XGoldenMinerConfigs.GetUpgradeCosts(upgradeId, indexConfig)
|
|
local isBuy = not XTool.IsNumberValid(originPrices) or upgradeStrengthen:CheckIsBuy(indexConfig)
|
|
|
|
if not isBuy then
|
|
local prices = originPrices and math.ceil(originPrices * self.SkipDiscount)
|
|
self.TxtNewPrice.text = isCanUpgrade and prices or ""
|
|
self.TxtSaleRate.text = isCanUpgrade and originPrices or ""
|
|
self.TxtSaleRate.gameObject:SetActiveEx(prices ~= originPrices)-- 折扣
|
|
self:RefreshPriceColor(prices)
|
|
else
|
|
self.PanelPrice1.gameObject:SetActiveEx(false)
|
|
if self.PanelInuse then
|
|
self.PanelInuse.gameObject:SetActiveEx(not isCanUpgrade)
|
|
self.PanelReplace.gameObject:SetActiveEx(isCanUpgrade)
|
|
end
|
|
end
|
|
|
|
self.CurClientLevelIndex = levelIndexServer
|
|
self.RImgPrice.gameObject:SetActiveEx(isCanUpgrade)
|
|
--self.ImgSellOut.gameObject:SetActiveEx(not isCanUpgrade)
|
|
self.PanelLevel.gameObject:SetActiveEx(false)
|
|
if self.DiscountTag and self.SkipDiscount ~= 1 then
|
|
self.DiscountTag.gameObject:SetActiveEx(isCanUpgrade)
|
|
self.TxtDiscountTag.text = (math.floor(self.SkipDiscount * 100)) .. XUiHelper.GetText("JPSnap")
|
|
end
|
|
end
|
|
|
|
function XUiShopGrid:CheckUpgradeCanBuy()
|
|
local type = XGoldenMinerConfigs.GetUpgradeType(self.UpgradeId)
|
|
local upgradeStrengthen = self.DataDb:GetUpgradeStrengthen(self.UpgradeId)
|
|
local nextLevelIndex = upgradeStrengthen:GetNextClientLevelIndex()
|
|
local originPrices = XGoldenMinerConfigs.GetUpgradeCosts(self.UpgradeId, nextLevelIndex)
|
|
local indexConfig = XGoldenMinerConfigs.GetUpgradeLocalIdIndex(self.UpgradeId, self.UpgradeLocalId)
|
|
local levelIndexServer = indexConfig - 1
|
|
local curLevelIndex = self.CurLevelIndex
|
|
local isCanUpgrade
|
|
|
|
if type == XGoldenMinerConfigs.UpgradeType.Level then
|
|
isCanUpgrade = originPrices and true or false
|
|
if not isCanUpgrade then
|
|
XUiManager.TipErrorWithKey("GoldenMinerAlreadyMaxLvTip")
|
|
end
|
|
elseif type == XGoldenMinerConfigs.UpgradeType.SameBuy then
|
|
isCanUpgrade = curLevelIndex ~= levelIndexServer
|
|
if not isCanUpgrade then
|
|
XUiManager.TipErrorWithKey("GoldenMinerAlreadyEquipTip")
|
|
end
|
|
elseif type == XGoldenMinerConfigs.UpgradeType.SameReplace then
|
|
isCanUpgrade = curLevelIndex ~= levelIndexServer
|
|
if not isCanUpgrade then
|
|
XUiManager.TipErrorWithKey("GoldenMinerAlreadyEquipTip")
|
|
end
|
|
end
|
|
return isCanUpgrade
|
|
end
|
|
--endregion
|
|
|
|
--region Ui - BtnListener
|
|
function XUiShopGrid:AddListener()
|
|
XUiHelper.RegisterClickEvent(self, self.BtnBuy, self.OnBtnBuyClick)
|
|
end
|
|
|
|
function XUiShopGrid:OnBtnBuyClick()
|
|
if XTool.IsNumberValid(self.ItemId) then
|
|
self:_BuyItem()
|
|
elseif XTool.IsNumberValid(self.UpgradeId) then
|
|
self:_BuyUpgrade()
|
|
end
|
|
end
|
|
|
|
function XUiShopGrid:_BuyUpgrade()
|
|
if not self:CheckUpgradeCanBuy() then
|
|
return
|
|
end
|
|
local levelIndex = 0
|
|
local type = XGoldenMinerConfigs.GetUpgradeType(self.UpgradeId)
|
|
local upgradeStrengthen = self.DataDb:GetUpgradeStrengthen(self.UpgradeId)
|
|
if type == XGoldenMinerConfigs.UpgradeType.Level then
|
|
levelIndex = upgradeStrengthen:GetNextClientLevelIndex()
|
|
else
|
|
levelIndex = XGoldenMinerConfigs.GetUpgradeLocalIdIndex(self.UpgradeId, self.UpgradeLocalId)
|
|
end
|
|
local originPrices = XGoldenMinerConfigs.GetUpgradeCosts(self.UpgradeId, levelIndex)
|
|
local prices = originPrices and math.ceil(originPrices * self.SkipDiscount)
|
|
local isBuy = not XTool.IsNumberValid(originPrices) or upgradeStrengthen:CheckIsBuy(levelIndex)
|
|
|
|
local title = XUiHelper.GetText("GoldenMinerBuyHookTitle")
|
|
local content = XUiHelper.GetText("GoldenMinerBuyHookContent", prices,
|
|
XGoldenMinerConfigs.GetUpgradeLocalName(self.UpgradeLocalId))
|
|
local sureCb = function()
|
|
XDataCenter.GoldenMinerManager.RequestGoldenMinerShipUpgrade(self.UpgradeId, self.CurClientLevelIndex, function()
|
|
if self.BuyCallback then
|
|
self.BuyCallback()
|
|
end
|
|
end)
|
|
end
|
|
if isBuy then
|
|
sureCb()
|
|
else
|
|
XLuaUiManager.Open("UiGoldenMinerDialog", title, content, nil, sureCb)
|
|
end
|
|
end
|
|
|
|
function XUiShopGrid:_BuyItem()
|
|
local itemId = self.ItemId
|
|
local emptyItemIndex
|
|
if XGoldenMinerConfigs.GetItemType(itemId) == XGoldenMinerConfigs.ItemType.NormalItem then
|
|
emptyItemIndex = self.DataDb:GetEmptyItemIndex()
|
|
if not emptyItemIndex then
|
|
XUiManager.TipErrorWithKey("GoldenMinerItemAlreadyMax")
|
|
return
|
|
end
|
|
end
|
|
|
|
XDataCenter.GoldenMinerManager.RequestGoldenMinerShopBuy(self.Index, emptyItemIndex, function()
|
|
self:UpdateItem()
|
|
if self.BuyCallback then
|
|
self.BuyCallback()
|
|
end
|
|
end)
|
|
end
|
|
--endregion
|
|
|
|
return XUiShopGrid |