PGRData/Script/matrix/xui/xuifashion/XUiFashionDetail.lua
2024-09-01 22:49:41 +02:00

372 lines
14 KiB
Lua

local CSXTextManagerGetText = CS.XTextManager.GetText
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local Application = CS.UnityEngine.Application
local Platform = Application.platform
local RuntimePlatform = CS.UnityEngine.RuntimePlatform
local CameraIndex = {
Normal = 1,
Near = 2,
}
local ViewType = {
Character = 1,
Weapon = 2,
}
local TitleName = {
Title = {
[ViewType.Character] = CSXTextManagerGetText("UiFashionDetailTitleCharacter"),
[ViewType.Weapon] = CSXTextManagerGetText("UiFashionDetailTitleWeapon"),
},
TipTitle = {
[ViewType.Character] = CSXTextManagerGetText("UiFashionDetailTipTitleCharacter"),
[ViewType.Weapon] = CSXTextManagerGetText("UiFashionDetailTipTitleWeapon"),
},
}
-- v1.28 采购优化-时装购买CD
local PurchaseBuyPayCD = CS.XGame.ClientConfig:GetInt("PurchaseBuyPayCD") / 1000
local XUiFashionDetail = XLuaUiManager.Register(XLuaUi, "UiFashionDetail")
function XUiFashionDetail:OnAwake()
self:AutoAddListener()
self.BtnLensOut.gameObject:SetActiveEx(true)
self.BtnLensIn.gameObject:SetActiveEx(false)
self.PanelBtnSwich.gameObject:SetActiveEx(false)
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.OnUiSceneLoadedCB = function() self:OnUiSceneLoaded() end
end
function XUiFashionDetail:OnStart(fashionId, isWeaponFashion, buyData, isShowFashionIconWithoutGift, isNeedCD)
self:InitSceneRoot() --设置摄像机
self.FashionId = fashionId
self.IsWeaponFashion = isWeaponFashion
self.BuyData = buyData
self.IsShowFashionIconWithoutGift = isShowFashionIconWithoutGift
if XWeaponFashionConfigs.IsWeaponFashion(self.FashionId) then
--v1.31武器时装
self.IsHaveFashion = XDataCenter.WeaponFashionManager.CheckHasFashion(self.FashionId) and
not XDataCenter.WeaponFashionManager.IsFashionTimeLimit(self.FashionId)
else
--v1.28-采购优化-记录是否当前皮肤是否已拥有
self.IsHaveFashion = XRewardManager.CheckRewardGoodsListIsOwnWithAll({XGoodsCommonManager.GetGoodsShowParamsByTemplateId(self.FashionId)})
end
-- 配置是否需要购买冷却
self.IsNeedCD = isNeedCD or false
-- 记录初始时间
self.LastBuyTime = CS.UnityEngine.Time.realtimeSinceStartup
self:SetDetailData()
end
function XUiFashionDetail:OnEnable()
CS.XGraphicManager.UseUiLightDir = true
if self.IsWeaponFashion then
self:LoadModelScene(true)
self:UpdateWeaponModel()
else
self:LoadModelScene(false)
self:UpdateCharacterModel()
end
self:InitBuyData()
end
function XUiFashionDetail:OnDisable()
CS.XGraphicManager.UseUiLightDir = false
end
function XUiFashionDetail:OnUiSceneLoaded()
--self:SetGameObject()
end
function XUiFashionDetail:InitBuyData()
self.BtnBuy.gameObject:SetActiveEx(false)
if not self.BuyData then
return
end
self.BtnBuy.gameObject:SetActiveEx(true)
self.TxtHave.gameObject:SetActiveEx(self.BuyData.IsHave)
-- 礼包中已拥有涂装文本
self.TxtRepeatWith.gameObject:SetActiveEx(not self.BuyData.IsHave and self.IsHaveFashion)
--local isHave = self.BuyData.IsHave or (self.IsHaveFashion and not self.BuyData.IsConvert)
--self.BtnBuy:SetDisable(isHave, not isHave)
self.BtnBuy:SetDisable(self.BuyData.IsHave, not self.BuyData.IsHave)
self.PanelInformation.gameObject:SetActiveEx(self.BuyData.LimitText ~= nil or self.BuyData.IsHave
or not string.IsNilOrEmpty(self.BuyData.FashionLabel) or self.IsHaveFashion)
self.TxtLimitBuy.text = self.BuyData.LimitText or ""
if self.BuyData.PayKeySuffix then
self.RawImageConsume.gameObject:SetActiveEx(false)
self.ImageYuan.gameObject:SetActiveEx(true)
self.BtnBuy:SetName(self:GetPayAmount(self.BuyData.PayKeySuffix))
if self.BuyData.IsHave then
local path = CS.XGame.ClientConfig:GetString("LBBuyRiYuanIconPath1")
self.ImageYuan:SetRawImage(path)
else
local path = CS.XGame.ClientConfig:GetString("LBBuyRiYuanIconPath")
self.ImageYuan:SetRawImage(path)
end
self:ShowSpecialRegulationForJP()
else
self.BtnBuy:SetName(self.BuyData.ItemCount)
self.RawImageConsume.gameObject:SetActiveEx(true)
self.ImageYuan.gameObject:SetActiveEx(false)
self.RawImageConsume:SetRawImage(self.BuyData.ItemIcon)
end
self.BtnBuy.CallBack = function()
-- v1.28 采购优化 记录时间, 判断是否拦截
if self.IsNeedCD then
if self.LastBuyTime and CS.UnityEngine.Time.realtimeSinceStartup - self.LastBuyTime > PurchaseBuyPayCD then
self.LastBuyTime = CS.UnityEngine.Time.realtimeSinceStartup
self:OnBtnBuyClick()
end
else
self:OnBtnBuyClick()
end
end
-- 皮肤礼包提示
if self.BuyData and self.BuyData.FashionLabel then
if self.TxtFashionTip then
self.TxtFashionTip.gameObject:SetActiveEx(true)
self.TxtFashionTip.text = self.BuyData.FashionLabel
end
end
--BuyData={
-- IsHave --------是否已经拥有
-- LimitText -------------限购提示字符串
-- ItemIcon -------------货币Icon
-- ItemCount-------------货币数量
-- BuyCallBack-----------购买时调用的接口
-- FashionTip-----------皮肤礼包自定义提示
-- }
end
function XUiFashionDetail:ShowSpecialRegulationForJP() --海外修改
local isShow = CS.XGame.ClientConfig:GetInt("ShowRegulationEnable")
if isShow and isShow == 1 then
local url = CS.XGame.ClientConfig:GetString("RegulationPrefabUrl")
if url then
local obj = self.BtnBuy.transform:LoadPrefab(url)
local data = {type = 2,consumeId = 1}
data.content = CS.XTextManager.GetText("JPBusinessLawsBuyLimitedText02",1)
self.ShowSpecialRegBtn = obj.transform:GetComponent("XHtmlText")
self.ShowSpecialRegBtn.text = CS.XTextManager.GetText("JPBusinessLawsDetailsEnter")
self.ShowSpecialRegBtn.HrefUnderLineColor = CS.UnityEngine.Color(1, 45 / 255, 45 / 255, 1)
self.ShowSpecialRegBtn.transform.localPosition = CS.UnityEngine.Vector3(-107.8, 110, 0)
self.ShowSpecialRegBtn.fontSize = 32
self.ShowSpecialRegBtn.HrefListener = function(link)
XLuaUiManager.Open("UiSpecialRegulationShow",data)
end
end
end
end
function XUiFashionDetail:GetPayAmount(PayKeySuffix)
local key = XPayConfigs.GetProductKey(PayKeySuffix)
local payConfig = XPayConfigs.GetPayTemplate(key)
return payConfig and payConfig.Amount or 0
end
function XUiFashionDetail:OnSliderCharacterHightChanged()
local pos = self.CameraNear[CameraIndex.Near].position
self.CameraNear[CameraIndex.Near].position = CS.UnityEngine.Vector3(pos.x, 1.7 - self.SliderCharacterHight.value, pos.z)
end
--初始化摄像机
function XUiFashionDetail:InitSceneRoot()
local root = self.UiModelGo.transform
self.RoleModelPanel = XUiPanelRoleModel.New(root:FindTransform("UiModelParent"), self.Name, nil, true, nil, true)
self.PanelWeapon = root:FindTransform("PanelWeapon")
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
self.CameraNear = {
[CameraIndex.Normal] = root:FindTransform("FashionCamNearMain"),
[CameraIndex.Near] = root:FindTransform("FashionCamNearest"),
}
end
function XUiFashionDetail:UpdateCamera(camera)
for _, cameraIndex in pairs(CameraIndex) do
self.CameraNear[cameraIndex].gameObject:SetActiveEx(cameraIndex == camera)
end
end
function XUiFashionDetail:OnBtnLensOut()
self.BtnLensOut.gameObject:SetActiveEx(false)
self.BtnLensIn.gameObject:SetActiveEx(true)
self:UpdateCamera(CameraIndex.Near)
end
function XUiFashionDetail:OnBtnLensIn()
self.BtnLensOut.gameObject:SetActiveEx(true)
self.BtnLensIn.gameObject:SetActiveEx(false)
self:UpdateCamera(CameraIndex.Normal)
end
function XUiFashionDetail:AutoAddListener()
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
XUiHelper.RegisterSliderChangeEvent(self, self.SliderCharacterHight, self.OnSliderCharacterHightChanged)
self.BtnLensOut.CallBack = function() self:OnBtnLensOut() end
self.BtnLensIn.CallBack = function() self:OnBtnLensIn() end
end
function XUiFashionDetail:SetDetailData()
-- v1.28-采购优化-赠品队列展示
-- 传入Data为单一rewardId的情况
local giftRewardId = self.BuyData and self.BuyData.GiftRewardId
if type(giftRewardId) == "number" then
if giftRewardId ~= 0 then
self.GoodIdList = XRewardManager.GetRewardList(giftRewardId)
end
elseif self.BuyData and self.BuyData.GiftRewardId then
self.GoodIdList = self.BuyData.GiftRewardId
end
-- v1.31-采购优化-涂装增加CG展示道具
if not self.IsWeaponFashion then
local subItems = XDataCenter.FashionManager.GetFashionSubItems(self.FashionId)
if subItems then
for _, itemTemplateId in ipairs(subItems) do
if self.GoodIdList == nil then self.GoodIdList = {} end
table.insert(self.GoodIdList, {TemplateId = itemTemplateId, Count = 1, IsSubItem = true})
end
end
end
-- giftRewardId=额外礼物,在商店皮肤界面,没有额外礼物,就显示时装物品
if self.GoodIdList and #self.GoodIdList > 0 and not self.IsShowFashionIconWithoutGift then
self.GridItem.gameObject:SetActiveEx(false)
self.RewordGoodList.gameObject:SetActiveEx(true)
self.GridGoodItem.gameObject:SetActiveEx(false)
self.DynamicTable = XDynamicTableNormal.New(self.RewordGoodList)
self.DynamicTable:SetProxy(XUiGridCommon)
self.DynamicTable:SetDelegate(self)
self.DynamicTable:SetDataSource(self.GoodIdList)
self.DynamicTable:ReloadDataASync(1)
self.Title.text = CS.XTextManager.GetText("SpecialFashionShopGiftTitle")
self.BtnClick.gameObject:SetActiveEx(true)
else
self.GridItem.gameObject:SetActiveEx(true)
self.RewordGoodList.gameObject:SetActiveEx(false)
self.GoodsShowParams = XGoodsCommonManager.GetGoodsShowParamsByTemplateId(self.FashionId)
if self.DetailRImgIcon then
local icon = self.GoodsShowParams.Icon
if icon and #icon > 0 then
self.DetailRImgIcon:SetRawImage(icon)
end
end
if self.DetailImgQuality and self.GoodsShowParams.Quality then
XUiHelper.SetQualityIcon(self, self.DetailImgQuality, self.GoodsShowParams.Quality)
end
end
if self.WorldDesc then
local worldDesc = XGoodsCommonManager.GetGoodsWorldDesc(self.FashionId)
if worldDesc and #worldDesc then
self.WorldDesc.text = worldDesc
end
end
if self.Desc then
local desc = XGoodsCommonManager.GetGoodsDescription(self.FashionId)
if desc and #desc > 0 then
self.Desc.text = desc
end
end
end
-- v1.28-采购优化-时装礼包赠品动态列表更新
function XUiFashionDetail:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local gridData = self.GoodIdList[index]
grid:Refresh(gridData)
-- 已拥有图标显示
local isHave = grid.TxtHave.gameObject.activeSelf
grid.ImgIsHave.gameObject:SetActiveEx(isHave)
end
end
function XUiFashionDetail:UpdateCharacterModel()
local template = XDataCenter.FashionManager.GetFashionTemplate(self.FashionId)
local func = function(model)
self.PanelDrag:GetComponent("XDrag").Target = model.transform
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
end
self.TxtTitle.text = TitleName.Title[ViewType.Character]
self.TxtTipTitle.text = TitleName.TipTitle[ViewType.Character]
self.TxtFashionName.text = template.Name
self.PanelWeapon.gameObject:SetActiveEx(false)
self.RoleModelPanel.GameObject:SetActiveEx(true)
self.PanelBtnLens.gameObject:SetActiveEx(true)
self.RoleModelPanel:UpdateCharacterResModel(template.ResourcesId, template.CharacterId, XModelManager.MODEL_UINAME.XUiFashionDetail, func)
end
function XUiFashionDetail:UpdateWeaponModel()
local weaponFashionId = self.FashionId
local uiName = XModelManager.MODEL_UINAME.XUiFashionDetail
local modelConfig = XDataCenter.WeaponFashionManager.GetWeaponModelCfg(weaponFashionId, nil, uiName)
local fashionName = XDataCenter.WeaponFashionManager.GetWeaponFashionName(weaponFashionId)
self.TxtTitle.text = TitleName.Title[ViewType.Weapon]
self.TxtTipTitle.text = TitleName.TipTitle[ViewType.Weapon]
self.TxtFashionName.text = fashionName
self.RoleModelPanel.GameObject:SetActiveEx(false)
self.PanelWeapon.gameObject:SetActiveEx(true)
self.PanelBtnLens.gameObject:SetActiveEx(false)
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
XModelManager.LoadWeaponModel(modelConfig.ModelId, self.PanelWeapon, modelConfig.TransformConfig, uiName, nil, { gameObject = self.GameObject ,IsDragRotation = true}, self.PanelDrag)
end
function XUiFashionDetail:OnBtnBackClick()
self:Close()
end
function XUiFashionDetail:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiFashionDetail:OnBtnBuyClick()
local title = XUiHelper.GetText("PurchaseFashionRepeatTipsTitle")
local content = XUiHelper.GetText("PurchaseFashionRepeatTipsContent")
local sureCb = function ()
self.BuyData.BuyCallBack()
self:OnBtnBackClick()
end
-- 已有涂装则二次确认
if self.IsHaveFashion then
XUiManager.DialogTip(title, content, nil, nil, sureCb)
else
sureCb()
end
end
function XUiFashionDetail:LoadModelScene(isDefault)
local sceneUrl = self:GetSceneUrl(isDefault)
local modelUrl = self:GetDefaultUiModelUrl()
self:LoadUiScene(sceneUrl, modelUrl, self.OnUiSceneLoadedCB, false)
end
function XUiFashionDetail:GetSceneUrl(isDefault)
if isDefault then
return self:GetDefaultSceneUrl()
end
local sceneUrl = XDataCenter.FashionManager.GetFashionSceneUrl(self.FashionId)
if sceneUrl and sceneUrl ~= "" then
return sceneUrl
else
return self:GetDefaultSceneUrl()
end
end