local UIDivineWeaponAppearance = UIViewClass() local EventSystem = require('Event/EventSystem') function UIDivineWeaponAppearance:OnOpened(context) self.appearanceDataList = {} self:RegistSystemEvent(EventID.UI_Appearance_Refresh, self.RefreshAppearanceList) self:RegistSystemEvent(EventID.BagItem_Update, self.RefreshAppearanceInfo) self.selectWeaponAppearanceId = context.weaponAppearanceId end function UIDivineWeaponAppearance:Init(context) self.weaponId = context.MagicWeaponID self.curAppearanceID = MDL.HeroSelect.GetWeaponAppearanceIDByID(self.weaponId) self.curIndex = nil if MDL.DivineWeapon.ItemUseAppearanceId then self:RefreshAppearanceList(self.data, MDL.DivineWeapon.ItemUseAppearanceId) EventSystem.Dispatch(EventID.UI_WeaponAppearance_ChangePreviewAppearance, self.curAppearanceID) MDL.DivineWeapon.ItemUseAppearanceId = nil else self:RefreshAppearanceList(self.data) end if self.selectWeaponAppearanceId and self.appearanceDataList then for index, v in ipairs(self.appearanceDataList) do if self.selectWeaponAppearanceId == v.appearanceID then self:ChangeAppearance(index-1) break end end end end function UIDivineWeaponAppearance:UpdateAppearanceData() table.clearArray(self.appearanceDataList) local list = MDL.Appearance.GetAppearanceDataByHeroID(self.weaponId, MDL.Appearance.AppearanceType.Weapon) for i, v in ipairs(list) do if (v.isOriginal == true) or (v.appearanceConfig.UnlockTriggerID == 0 or MDL.Unlock.IsTriggerIdComplete(v.appearanceConfig.UnlockTriggerID)) then table.insert(self.appearanceDataList, v) end end end function UIDivineWeaponAppearance:RefreshAppearanceList(optType, appearanceID) -- 皮肤列表` self:UpdateAppearanceData() self.AppearanceScroll:ReloadAll(self.appearanceDataList) if self.appearanceDataList then if MDL.HeroSelect.IsMagicWeaponActive(self.weaponId) then self.WearAppearanceID = MDL.HeroSelect.GetWeaponAppearanceIDByID(self.weaponId) for k, v in ipairs(self.appearanceDataList) do if appearanceID then if appearanceID == v.appearanceID then self.curIndex = k - 1 end else if self.WearAppearanceID == v.appearanceID then self.curIndex = k - 1 end end end else self.curIndex = 0 self.WearAppearanceID = -1 -- 如果为0则表示没有激活任何外观 此时穿戴外观默认是-1 end self.curAppearanceID = self.appearanceDataList[self.curIndex + 1].appearanceID AuxUtil.InitEnhanceScroll(self.AppearanceScroll.transform, self.curIndex) end UIUtils.SetActive(self.btn_ArrowLeft, self.curIndex ~= 0) self:RefreshAppearanceInfo() end function UIDivineWeaponAppearance:OnButtonClicked(comp) if comp == self.btn_Check then UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, {id = LuaConst.NoteID.WeaponAppearance }) elseif comp == self.btn_Video then -- 播视频 UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonPlayMovie, { MovieName = self.curAppearanceData.appearanceConfig.PromotionalVideo }) elseif comp == self.btn_ArrowLeft then if self.curIndex == 0 then CTL.Tips.AddTipsMsgAndPlaySound(Const_IDS.IDS_Appearance_FirstOne) else self:ChangeAppearance(self.curIndex - 1) end elseif comp == self.btn_ArrowRight then if self.curIndex == #self.appearanceDataList - 1 then CTL.Tips.AddTipsMsgAndPlaySound(Const_IDS.IDS_Appearance_LastOne) else self:ChangeAppearance(self.curIndex + 1) end elseif comp == self.Btn_ActiveItem then -- 激活消耗物品 UTL.ItemTips.ShowCommonTipsById(self.curAppearanceData.appearanceConfig.Activation) elseif comp == self.Btn_UpgradeItem then -- 升级消耗物品 UTL.ItemTips.ShowCommonTipsById(self.nextAppearanceLevelUpCfg.DemandItem) elseif comp == self.btn_CheckUpgrade01 then UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, {id = LuaConst.NoteID.WeaponAppearanceAttr}) else if not MDL.HeroSelect.IsMagicWeaponActive(self.weaponId) then CTL.Tips.AddTipsMsgAndPlaySound(Const_IDS.IDS_Appearance_WeiJiHuoShenBing) return end if comp == self.btn_InitialEquip or comp == self.btn_Equip then -- 穿戴 if self.curAppearanceData.appearanceID == 0 then MDL.Appearance.WearAppearanceRequest(self.weaponId, self.weaponId, MDL.Appearance.AppearanceType.Weapon) else MDL.Appearance.WearAppearanceRequest(self.curAppearanceData.appearanceID, self.weaponId, MDL.Appearance.AppearanceType.Weapon) end elseif comp == self.btn_Upgrade then -- 升级 if UTL.Item.GetItemStockCount(self.nextAppearanceLevelUpCfg.DemandItem) >= self.nextAppearanceLevelUpCfg.DemandNum then MDL.Appearance.AppearanceLevelUpRequest(self.curAppearanceData.appearanceID, MDL.Appearance.AppearanceType.Weapon) else CTL.Tips.AddTipsMsgAndPlaySound(string.FormatByIdsId(Const_IDS.IDS_Guild_CommonFail1, UTL.Item.GetItemDataSpliceByType(self.nextAppearanceLevelUpCfg.DemandItem).Name)) end elseif comp == self.btn_Act then -- 激活 if UTL.Item.GetItemStockCount(self.curAppearanceData.appearanceConfig.Activation) >= 1 then MDL.Appearance.ActiveAppearanceRequest(self.curAppearanceData.appearanceID, MDL.Appearance.AppearanceType.Weapon) else CTL.Tips.AddTipsMsgAndPlaySound(Const_IDS.IDS_Appearance_WeiHuoDe) end end end end function UIDivineWeaponAppearance:OnCellSelect(scrollRect, index, cellTable, data) self:ChangeAppearance(index) end function UIDivineWeaponAppearance:OnCellMoveCenter(scrollRect, index, cellTable, data) self:ChangeAppearance(index) end function UIDivineWeaponAppearance:OnCellInit(scrollRect, index, cellTable, data) UTL.Color.SetQualityImageByType(cellTable.img_AppearanceBg, data.appearanceConfig.MagicWeaponQuality, UTL.Color.QualityType.AppearanceInfoBase) -- 外观框 UTL.Color.SetQualityImageByType(cellTable.img_AppearanceFrame, data.appearanceConfig.MagicWeaponQuality, UTL.Color.QualityType.AppearanceBase_Frame) -- 半身立绘 UIUtils.SetImageByAssetBundle(cellTable.img_AppearanceIcon, data.appearanceConfig.PreviewCardImage) UIUtils.SetActive(cellTable.img_LvBg, not data.isOriginal) UIUtils.SetActive(cellTable.img_Unselected, not data.isActive) if not data.isOriginal then -- 皮肤名 cellTable.txt_AppearanceName:SetText(UIUtils.GetLocalizedTxt(Const_IDS[data.appearanceConfig.AppearanceName])) -- 皮肤等级 UIUtils.SetActive(cellTable.img_LvBg, data.appearanceLevel > 0) if data.appearanceLevel > 0 then UIUtils.SetLabel(cellTable.txt_Lv, data.appearanceLevel) end -- 等级底图 UTL.Color.SetQualityImageByType(cellTable.img_LvBg, data.appearanceConfig.MagicWeaponQuality, UTL.Color.QualityType.AppearanceLevelInfoBase) else -- 皮肤名 cellTable.txt_AppearanceName:SetText(UIUtils.GetLocalizedTxt(Const_IDS.IDS_Appearance_UI_ChuShiShiZhuang)) UIUtils.SetActive(cellTable.img_RedPoint, false) return end UIUtils.SetActive(cellTable.img_RedPoint, false) UIUtils.SetActive(cellTable.img_YelPoint, false) cellTable.effect_AppearanceQuality:StopUIEffect() if data.appearanceID > 0 then if data.isActive then local isMax = DataSheetManager.WeaponAppearanceLevelUp:GetDataLengthByID_Level(data.appearanceID) == data.appearanceLevel --local isMax = DataSheetManager.HeroAppearanceLevelUp:GetDataLengthByHeroAppearanceID_Level(data.appearanceID) == data.appearanceLevel if not isMax then self.nextAppearanceLevelUpCfg = DataSheetManager.WeaponAppearanceLevelUp:GetDataByID_Level(data.appearanceID, data.appearanceLevel + 1) local curItemCount = UTL.Item.GetItemStockCount(self.nextAppearanceLevelUpCfg.DemandItem) if MDL.Player.HeroIsLineUp( self.weaponId) then UIUtils.SetActive(cellTable.img_RedPoint, MDL.HeroSelect.IsMagicWeaponActive(self.weaponId) and curItemCount >= self.nextAppearanceLevelUpCfg.DemandNum) UIUtils.SetActive(cellTable.img_YelPoint, false) else UIUtils.SetActive(cellTable.img_YelPoint, MDL.HeroSelect.IsMagicWeaponActive(self.weaponId) and curItemCount >= self.nextAppearanceLevelUpCfg.DemandNum) UIUtils.SetActive(cellTable.img_RedPoint, false) end end --品质特效 UTL.Color.PlayQualityEffect(cellTable.effect_AppearanceQuality, data.appearanceConfig.EffectID, UTL.Color.EffectType.Skin) else local curItemCount = UTL.Item.GetItemStockCount(data.appearanceConfig.Activation) UIUtils.SetActive(cellTable.img_RedPoint, MDL.HeroSelect.IsMagicWeaponActive(self.weaponId) and curItemCount >= 1) end end end function UIDivineWeaponAppearance:RefreshAppearanceInfo() self.curAppearanceData = MDL.Appearance.GetAppearanceDataByHeroID_AppearanceID(self.weaponId, self.curAppearanceID, MDL.Appearance.AppearanceType.Weapon) self.state_Appearance:SetState(self.curAppearanceID == self.weaponId and 0 or 1) if self.curAppearanceID == self.weaponId then self.state_OriginalIsWear:SetState(self.WearAppearanceID == self.curAppearanceID and 0 or 1) UIUtils.SetActive(self.btn_Video, false) -- 播视频按钮 else self.state_Attr:SetState(self.curAppearanceData.isActive and 1 or 0) self.state_ActiveOrLevelUp:SetState(self.curAppearanceData.isActive and 1 or 0) self.state_Equipped:SetState(self.WearAppearanceID == self.curAppearanceID and 1 or 0) UIUtils.SetActive(self.btn_Video, self.curAppearanceData.appearanceConfig.PromotionalVideo ~= "") -- 播视频按钮 if self.curAppearanceData.isActive then local appearanceLevelUpCfg if self.curAppearanceData.appearanceLevel == 0 then appearanceLevelUpCfg = self.curAppearanceData.appearanceConfig else appearanceLevelUpCfg = DataSheetManager.WeaponAppearanceLevelUp:GetDataByID_Level(self.curAppearanceData.appearanceID, self.curAppearanceData.appearanceLevel) end local isMax = DataSheetManager.WeaponAppearanceLevelUp:GetDataLengthByID_Level(self.curAppearanceData.appearanceID) == self.curAppearanceData.appearanceLevel self.state_IsMax:SetState(isMax and 0 or 1) if isMax then self.state_Attr:SetState(2) self:SetAttr(appearanceLevelUpCfg.Attr_Table, true) else for k, v in ipairs(appearanceLevelUpCfg.Attr_Table) do if v.AttrType == LuaConst.AttrTypeId.hplmt then UIUtils.SetLabel(self.cell_Hp.txt_Attr_Before, v.AttrNum) elseif v.AttrType == LuaConst.AttrTypeId.atk then UIUtils.SetLabel(self.cell_Atk.txt_Attr_Before, v.AttrNum) elseif v.AttrType == LuaConst.AttrTypeId.def then UIUtils.SetLabel(self.cell_Defense.txt_Attr_Before, v.AttrNum) end end self.nextAppearanceLevelUpCfg = DataSheetManager.WeaponAppearanceLevelUp:GetDataByID_Level(self.curAppearanceData.appearanceID, self.curAppearanceData.appearanceLevel + 1) self:SetAttr(self.nextAppearanceLevelUpCfg.Attr_Table, false) -- 升级消耗道具数量 local curItemCount = UTL.Item.GetItemStockCount(self.nextAppearanceLevelUpCfg.DemandItem) local itemData = DataSheetManager.ItemData:GetDataByID(self.nextAppearanceLevelUpCfg.DemandItem) UTL.Item.ItemIconByName(self.img_UpgradeIcon, itemData.Icon) local count if curItemCount >= self.nextAppearanceLevelUpCfg.DemandNum then count = UTL.Color.FormatGreenColor(curItemCount) .. "/" .. self.nextAppearanceLevelUpCfg.DemandNum else count = UTL.Color.FormatRedColor(curItemCount) .. "/" .. self.nextAppearanceLevelUpCfg.DemandNum end UIUtils.SetLabel(self.txt_UpgradeNum, count) local isShowRp = MDL.HeroSelect.IsMagicWeaponActive(self.weaponId) and curItemCount >= self.nextAppearanceLevelUpCfg.DemandNum if MDL.Player.HeroIsLineUp(self.weaponId) then self.btn_Upgrade:SetRedPoint(isShowRp) UIUtils.SetActive(self.img_YelPoint, false) else self.btn_Upgrade:SetRedPoint(false) UIUtils.SetActive(self.img_YelPoint, isShowRp) end end else self:SetAttr(self.curAppearanceData.appearanceConfig.Attr_Table, true) -- 激活道具数量 local curItemCount = UTL.Item.GetItemStockCount(self.curAppearanceData.appearanceConfig.Activation) local itemData = DataSheetManager.ItemData:GetDataByID(self.curAppearanceData.appearanceConfig.Activation) UTL.Item.ItemIconByName(self.img_ActIcon, itemData.Icon) local count if curItemCount >= 1 then count = UTL.Color.FormatGreenColor(curItemCount) .. "/" .. 1 else count = UTL.Color.FormatRedColor(curItemCount) .. "/" .. 1 end UIUtils.SetLabel(self.txt_ActNum, count) self.btn_Act:SetRedPoint(MDL.HeroSelect.IsMagicWeaponActive(self.weaponId) and curItemCount >= 1) end local defaultWeaponTalent = DataSheetManager.MagicWeaponData:GetDataByMagicWeaponID(self.weaponId).MagicWeaponTalent local difference = self.curAppearanceData.appearanceConfig.MagicWeaponTalent - defaultWeaponTalent -- 穿戴生效 UIUtils.SetActive(self.group_Equip, difference > 0) if difference > 0 then -- 资质 if self.curAppearanceData.appearanceConfig.MagicWeaponTalent > 0 then local defaultWeaponTalent = DataSheetManager.MagicWeaponData:GetDataByMagicWeaponID(self.weaponId).MagicWeaponTalent local difference = self.curAppearanceData.appearanceConfig.MagicWeaponTalent - defaultWeaponTalent if self.curAppearanceData.isActive then difference = UTL.Color.FormatWhiteColor("+" .. difference) else difference = UTL.Color.FormatGreenColor("+" .. difference) end UIUtils.SetLabel(self.txt_Intelligence, difference) end end UIUtils.SetActive(self.group_SkillInfo, false) end end -- 切换皮肤预览 function UIDivineWeaponAppearance:ChangeAppearance(index) if self.curIndex == index then return end self.curIndex = index UIUtils.SetActive(self.btn_ArrowLeft, self.curIndex ~= 0) UIUtils.SetActive(self.btn_ArrowRight, self.curIndex ~= #self.appearanceDataList - 1) self.curAppearanceID = self.appearanceDataList[index + 1].appearanceID AuxUtil.SetCenterChildIndex(self.AppearanceScroll.transform, self.curIndex) EventSystem.Dispatch(EventID.UI_WeaponAppearance_ChangePreviewAppearance, self.curAppearanceID) self:RefreshAppearanceInfo() end function UIDivineWeaponAppearance:SetAttr(attrTable, isPlus) for k, v in ipairs(attrTable) do if v.AttrType == LuaConst.AttrTypeId.hplmt then if isPlus then UIUtils.SetLabel(self.cell_Hp.txt_Attr, "+" .. v.AttrNum) else UIUtils.SetLabel(self.cell_Hp.txt_Attr, v.AttrNum) end elseif v.AttrType == LuaConst.AttrTypeId.atk then if isPlus then UIUtils.SetLabel(self.cell_Atk.txt_Attr, "+" .. v.AttrNum) else UIUtils.SetLabel(self.cell_Atk.txt_Attr, v.AttrNum) end elseif v.AttrType == LuaConst.AttrTypeId.def then if isPlus then UIUtils.SetLabel(self.cell_Defense.txt_Attr, "+" .. v.AttrNum) else UIUtils.SetLabel(self.cell_Defense.txt_Attr, v.AttrNum) end end end end return UIDivineWeaponAppearance