PGRData/Resources/Scripts/XUi/XUiObtain/XUiGridCommon.lua
2022-12-26 14:06:01 +05:30

436 lines
No EOL
15 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.

local type = type
local CONDITION_COLOR = {
[true] = CS.UnityEngine.Color.black,
[false] = CS.UnityEngine.Color.red,
}
XUiGridCommon = XClass(nil, "XUiGridCommon")
local XUiPanelNameplate = require("XUi/XUiNameplate/XUiPanelNameplate")
function XUiGridCommon:Ctor(rootUi, ui)
if not ui then
ui = rootUi
else
self.RootUi = rootUi
end
self.GameObject = ui.gameObject
self.Transform = ui.transform
self:InitAutoScript()
self.TextCount = XUiHelper.TryGetComponent(self.Transform, "TextCount", nil)
end
function XUiGridCommon:Init(rootUi)
self.RootUi = rootUi
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiGridCommon:InitAutoScript()
self:AutoInitUi()
XTool.InitUiObject(self)
self.SpecialSoundMap = {}
self:AutoAddListener()
end
function XUiGridCommon:AutoInitUi()
self.TxtCount = XUiHelper.TryGetComponent(self.Transform, "TxtCount", "Text")
if not self.TxtCount then self.TxtCount = XUiHelper.TryGetComponent(self.Transform, "PanelTxt/TxtCount", "Text") end -- 兼容不同grid结构
self.TxtName = XUiHelper.TryGetComponent(self.Transform, "TxtName", "Text")
self.TxtHave = XUiHelper.TryGetComponent(self.Transform, "TxtHave", "Text")
if not self.TxtHave then self.TxtHave = XUiHelper.TryGetComponent(self.Transform, "PanelTxt/TxtHave", "Text") end -- 兼容不同grid结构
self.ImgNew = XUiHelper.TryGetComponent(self.Transform, "ImgNew", "Image")
self.RImgIcon = XUiHelper.TryGetComponent(self.Transform, "RImgIcon", "RawImage")
self.HeadIconEffect = XUiHelper.TryGetComponent(self.Transform, "RImgIcon/Effect", "XUiEffectLayer")
self.ImgQuality = XUiHelper.TryGetComponent(self.Transform, "ImgQuality", "Image")
self.PanelSite = XUiHelper.TryGetComponent(self.Transform, "PanelSite", nil)
self.TxtSite = XUiHelper.TryGetComponent(self.Transform, "PanelSite/TxtSite", "Text")
self.BtnClick = XUiHelper.TryGetComponent(self.Transform, "BtnClick", "Button")
self.ImgUp = XUiHelper.TryGetComponent(self.Transform, "ImgUp", "Image")
self.ImgRail = XUiHelper.TryGetComponent(self.Transform, "ImgRail", "Image")
self.ImgReceived = XUiHelper.TryGetComponent(self.Transform, "ImgReceived", "Image")
self.ImgQualityTag = XUiHelper.TryGetComponent(self.Transform, "ImgQualityTag", "Image")
self.TxtStock = XUiHelper.TryGetComponent(self.Transform, "TxtStock", "Text")
self.ImgNone = XUiHelper.TryGetComponent(self.Transform, "ImgNone", nil)
end
function XUiGridCommon:AutoAddListener()
XUiHelper.RegisterClickEvent(self, self.BtnClick, self.OnBtnClickClick)
end
function XUiGridCommon:SetBtnNotClick(statue)
self.BtnNotClick = statue
end
-- auto
function XUiGridCommon:OnBtnClickClick()
if self.Disable or self.BtnNotClick then
return
end
-- 匹配中
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
return
end
if self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Character then
--从Tips的ui跳转需要关闭Tips的UI
if self.RootUi.Ui.UiData.UiType == CsXUiType.Tips then
self.RootUi:Close()
end
-- 暂停自动弹窗
XDataCenter.AutoWindowManager.StopAutoWindow()
XLuaUiManager.Open("UiCharacterDetail", self.TemplateId)
elseif self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Equip then
XLuaUiManager.Open("UiEquipDetail", self.TemplateId, true)
--从Tips的ui跳转需要关闭Tips的UI
if self.RootUi.Ui.UiData.UiType == CsXUiType.Tips then
self.RootUi:Close()
end
-- 暂停自动弹窗
XDataCenter.AutoWindowManager.StopAutoWindow()
elseif self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Furniture then
local cfg = XFurnitureConfigs.GetFurnitureReward(self.TemplateId)
local furnitureRewardId = self.TemplateId
local configId = cfg.FurnitureId
XLuaUiManager.Open("UiFurnitureDetail", self.Data.InstanceId, configId, furnitureRewardId, nil, true)
elseif self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Fashion then
local buyData
if self.Data and self.Data.ItemCount and self.Data.ItemIcon and self.Data.BuyCallBack then
buyData = {}
local isHave, isLimitTime = XRewardManager.CheckRewardOwn(self.GoodsShowParams.RewardType, self.GoodsShowParams.TemplateId)
buyData.IsHave = isHave and not isLimitTime
buyData.ItemIcon = self.Data.ItemIcon
buyData.ItemCount = self.Data.ItemCount
buyData.BuyCallBack = self.Data.BuyCallBack
end
XLuaUiManager.Open("UiFashionDetail", self.TemplateId, false, buyData)
elseif self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Partner then
--从Tips的ui跳转需要关闭Tips的UI
if self.RootUi.Ui.UiData.UiType == CsXUiType.Tips then
self.RootUi:Close()
end
-- 暂停自动弹窗
XDataCenter.AutoWindowManager.StopAutoWindow()
local partnerData = {Id = 0,TemplateId = self.TemplateId}
local partner = XDataCenter.PartnerManager.CreatePartnerEntityByPartnerData(partnerData, true)
XLuaUiManager.Open("UiPartnerPreview", partner)
elseif XDataCenter.ItemManager.IsWeaponFashion(self.TemplateId) then
local weaponFashionId = XDataCenter.ItemManager.GetWeaponFashionId(self.TemplateId)
XLuaUiManager.Open("UiFashionDetail", weaponFashionId, true)
elseif self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Nameplate then
XLuaUiManager.Open("UiNameplateTip", self.TemplateId, true, true)
else
XLuaUiManager.Open("UiTip", self.Data and self.Data or self.TemplateId, self.HideSkipBtn, self.RootUi.Name)
end
end
function XUiGridCommon:SetUiActive(ui, active)
if not ui or not ui.gameObject then
return
end
if ui.gameObject.activeSelf == active then
return
end
ui.gameObject:SetActiveEx(active)
end
function XUiGridCommon:ResetUi()
self:SetUiActive(self.TxtCount, false)
self:SetUiActive(self.TxtName, false)
self:SetUiActive(self.ImgNew, false)
self:SetUiActive(self.RImgIcon, false)
self:SetUiActive(self.ImgQuality, false)
self:SetUiActive(self.PanelSite, false)
self:SetUiActive(self.ImgUp, false)
self:SetUiActive(self.ImgRail, false)
self:SetUiActive(self.ImgReceived, false)
self:SetUiActive(self.ImgQualityTag, false)
self:SetUiActive(self.IconLevel, false)
self:SetUiActive(self.TxtHave, false)
self:SetUiActive(self.TxtStock, false)
self:SetUiActive(self.ImgNone, false)
end
-- data支持数据结构 XEquipData XItemData XCharacterData
-- tags可包含: { ShowUp, ShowNew }
function XUiGridCommon:Refresh(data, params, isBigIcon, hideSkipBtn, curCount)
if XTool.UObjIsNil(self.GameObject) then
return
end
self.GameObject:SetActiveEx(data)
if not data then
return
end
self:ResetUi()
self.HideSkipBtn = hideSkipBtn
local count, costCount
if type(data) == "number" then
self.TemplateId = data
else
self.Data = data
self.TemplateId = (data.TemplateId and data.TemplateId > 0) and data.TemplateId or data.Id
count = data.Count
costCount = data.CostCount
end
self.GoodsShowParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(self.TemplateId)
params = params or {}
-- 名字
if self.TxtName and self.GoodsShowParams.Name then
if self.GoodsShowParams.RewardType == XArrangeConfigs.Types.Character then
self.TxtName.text = self.GoodsShowParams.TradeName
else
self.TxtName.text = self.GoodsShowParams.Name
end
self:SetUiActive(self.TxtName, true)
end
-- 数量
if self.TxtCount and count then
self.TxtCount.text = CS.XTextManager.GetText("ShopGridCommonCount", count)
self:SetUiActive(self.TxtCount, true)
end
-- 可消耗数量
if self.TxtHaveCount and count and self.TxtNeedCount and costCount then
self.TxtHaveCount.text = count
self.TxtNeedCount.text = "/" .. costCount
self.TxtHaveCount.color = CONDITION_COLOR[count >= costCount]
self:SetUiActive(self.TxtHaveCount, true)
self:SetUiActive(self.TxtNeedCount, true)
end
-- 图标
if self.RImgIcon then
local icon = self.GoodsShowParams.Icon
if isBigIcon and self.GoodsShowParams.BigIcon then
icon = self.GoodsShowParams.BigIcon
end
if icon and #icon > 0 then
--self.RootUi:SetUiSprite(self.RImgIcon, icon)
self.RImgIcon:SetRawImage(icon)
self:SetUiActive(self.RImgIcon, true)
end
end
-- 特效
if self.HeadIconEffect then
local effect = self.GoodsShowParams.Effect
if effect then
self.HeadIconEffect.gameObject:LoadPrefab(effect)
self.HeadIconEffect.gameObject:SetActiveEx(true)
else
self.HeadIconEffect.gameObject:SetActiveEx(false)
end
end
-- 品质底图
if self.ImgQuality and self.GoodsShowParams.Quality then
local qualityIcon = self.GoodsShowParams.QualityIcon
if qualityIcon then
self.RootUi:SetUiSprite(self.ImgQuality, qualityIcon)
else
XUiHelper.SetQualityIcon(self.RootUi, self.ImgQuality, self.SyncQuality or self.GoodsShowParams.Quality)
end
self:SetUiActive(self.ImgQuality, true)
end
-- 品质底图(大)
if self.ImgIconQuality and self.GoodsShowParams.Quality then
XUiHelper.SetQualityIcon(self.RootUi, self.ImgIconQuality, self.SyncQuality or self.GoodsShowParams.Quality)
self:SetUiActive(self.ImgQuality, true)
end
-- 创世纪标签
if self.ImgQualityTag and self.GoodsShowParams.QualityTag then
self:SetUiActive(self.ImgQualityTag, true)
end
if self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Equip then
-- 星数
if self.PanelStars then
self:ShowStar(self.GoodsShowParams.Star, self.GoodsShowParams.Star)
end
--
if self.PanelSite then
self:SetUiActive(self.PanelSite, self.GoodsShowParams.Site ~= XEquipConfig.EquipSite.Weapon)
self.TxtSite.text = "0" .. self.GoodsShowParams.Site
end
end
--铭牌
if self.GoodsShowParams.RewardType == XRewardManager.XRewardType.Nameplate then
self:SetUiActive(self.ImgQuality, false)
self:SetUiActive(self.RImgIcon, false)
local BtnSiblingIndex = 0
if self.BtnClick then
BtnSiblingIndex = self.BtnClick.transform:GetSiblingIndex()
end
if not self.PanelNamePlate then
local prefab = self.GameObject:LoadPrefab(XMedalConfigs.XNameplatePanelPath)
prefab.transform:SetSiblingIndex(BtnSiblingIndex)
local rectTransform = prefab.transform:GetComponent("RectTransform")
if rectTransform then
rectTransform.anchorMax = CS.UnityEngine.Vector2(0.5, 0.5)
rectTransform.anchorMin = CS.UnityEngine.Vector2(0.5, 0.5)
rectTransform.anchoredPosition = CS.UnityEngine.Vector2(0, 15)
rectTransform.localScale = CS.UnityEngine.Vector3(0.8, 0.8, 0.8)
end
self.PanelNamePlate = XUiPanelNameplate.New(prefab, self.RootUi)
end
self.PanelNamePlate.GameObject:SetActiveEx(true)
self.PanelNamePlate:UpdateDataById(self.TemplateId)
else
if self.PanelNamePlate then
self.PanelNamePlate.GameObject:SetActiveEx(false)
else
local prefab = self.GameObject:LoadPrefab(XMedalConfigs.XNameplatePanelPath)
prefab.gameObject:SetActiveEx(false)
end
end
-- 特殊 : Params
-- Params.ShowUp
if self.ImgUp then
self:SetUiActive(self.ImgUp, params.ShowUp)
end
-- Params.ShowNew
if self.ImgNew then
self:SetUiActive(self.ImgNew, params.ShowNew)
end
-- Params.ShowReceived 已领取
if self.ImgReceived then
self:SetUiActive(self.ImgReceived, params.ShowReceived)
end
-- Params.Disable 不可点击
self.Disable = params.Disable
--特殊抽奖中奖品的剩余数
if self.TxtStock then
if curCount then
self.TxtStock.text = CS.XTextManager.GetText("ResidueStockText", curCount)
self:SetUiActive(self.TxtStock, true)
end
self:SetUiActive(self.TxtName, false)
end
--特殊抽奖中是否有库存的提示
if self.ImgNone then
self:SetUiActive(self.ImgNone, curCount and curCount <= 0)
end
--收藏品等级
if self.IconLevel and self.GoodsShowParams.LevelIcon then
local levelIcon = self.SyncLevelIcon or self.GoodsShowParams.LevelIcon
if levelIcon then
self.RootUi:SetUiSprite(self.IconLevel, levelIcon)
self:SetUiActive(self.IconLevel, true)
end
end
--是否已拥有
if self.TxtHave then
local isHave, isLimitTime = XRewardManager.CheckRewardOwn(self.GoodsShowParams.RewardType, self.GoodsShowParams.TemplateId)
local isShowTextHave = isHave and not isLimitTime
self:SetUiActive(self.TxtHave, isShowTextHave)
self:SetUiActive(self.TxtCount, not isShowTextHave)
end
--清除临时的同步数据
self:ClearSynData()
end
function XUiGridCommon:ShowCount(show)
if (self.TxtCount) then
self.TxtCount.gameObject:SetActiveEx(show)
end
if self.TextCount then
self.TextCount.gameObject:SetActiveEx(show)
end
end
function XUiGridCommon:ShowStar(count, max)
local showStar = max > 0
self.PanelStars.gameObject:SetActiveEx(showStar)
if not showStar then
return
end
for i = 1, 6 do
local starPanel = self["PanelStar" .. i]
if starPanel then
starPanel.gameObject:SetActiveEx(i <= max)
end
local imgStar = self["ImgStar" .. i]
if imgStar then
imgStar.gameObject:SetActiveEx(i <= count)
end
end
end
function XUiGridCommon:SetReceived(isReceive)
if self.ImgReceived then
self:SetUiActive(self.ImgReceived, isReceive)
end
end
function XUiGridCommon:SetShowUp(isShow)
if self.ImgUp then
self:SetUiActive(self.ImgUp, isShow)
end
end
function XUiGridCommon:SetUpText(text)
if self.UpText then
self.UpText.text = text
end
end
function XUiGridCommon:SetUpImg(img)
if self.ImgUp then
self.ImgUp:SetRawImage(img)
end
end
function XUiGridCommon:SetClickCallback(callback)
XUiHelper.RegisterClickEvent(self, self.BtnClick, callback, true)
end
function XUiGridCommon:SetSyncQuality(quality)
self.SyncQuality = quality
end
function XUiGridCommon:SetSyncLevelIcon(levelIcon)
self.SyncLevelIcon = levelIcon
end
function XUiGridCommon:ClearSynData()
self.SyncQuality = nil
self.SyncLevelIcon = nil
end
function XUiGridCommon:GetQuality()
return self.GoodsShowParams.Quality
end
return XUiGridCommon