--宠物图鉴 local UIPetIllustratedHandbook = UIViewClass() local FAKE_PET_PEDIGREE_EXTRA = DataSheetManager.ConstData:GetDataByID("PetTalentExtraParentAdd").IntValue local FAKE_PET_PEDIGREE = DataSheetManager.ConstData:GetDataByID("PetTalentExtraAdd").IntValue local SOURCE_ITEM_ID = 3101001 local CONST_DESC = { [1001] = Const_IDS.IDS_Pet_GetLongNv, [1002] = Const_IDS.IDS_Pet_GetChongMing, } function UIPetIllustratedHandbook:OnOpened(context) UIManager.ActiveUIModle(false, "UIPetIllustratedHandbook") self:RegistTriggerEvent(self.PetFormation, UIEventTriggerType.Drag) self:RegistSystemEvent(EventID.UI_CloseAndRecoverView, self.OnCloseAndRecoverView) self.godSkillArray = {} if context and context.isCatch then self:RegistSystemEvent(EventID.UI_Pet_UpdateGlobalInfo, self.OnGlobalInfoUpdate) self.state_BG:SetState(1) self:UpdateRewardInfo() else self.state_BG:SetState(0) CTL.Pet.TryRemoveOneTimeTed() end self.modelComponentDataHandle = UTL.UIRender.CreateModelComponentDatas(self.PetFormation) UIUtils.SetLabelText(self.UIPetPopUpBig.txt_Title, Const_IDS.IDS_PetHandbookTitle) self:InitPetCells() if context and context.selectPetCfg then self.selectPetCfg = context.selectPetCfg local state = self.selectPetCfg.Stage if self.selectPetCfg.Quality == MDL.Pet.PetQuality.Normal then self:OnSelectPet(self.selectPetCfg) self.loopScroll_Pet:RefreshCells() else for i, v in ipairs(self.normalLevelPetDic[-1]) do if v.ID == self.selectPetCfg.ID then self:OnSelectGodPet(i) break end end end self.toggles_Btn:SelectIndex(state) end end function UIPetIllustratedHandbook:InitPetCells() self.normalLevelPetDic = {} self.selectPetCfg = nil local tmpOrderList = {} --用来辅助顺序遍历self.normalLevelPetDic用 --收集数据 self.normalLevelPetDic key是等级 value是宠物列表,策划保证每个等级段最多3个 for i, v in DataSheetManager.PetData:GetEnumerator() do if v.Stage == MDL.Pet.PetState.Basic then local level = v.Quality == MDL.Pet.PetQuality.Normal and v.TakeLevel or -1 if self.normalLevelPetDic[level] == nil then self.normalLevelPetDic[level] = { v } table.insert(tmpOrderList, level) else table.insert(self.normalLevelPetDic[level], v) end end end table.sort(tmpOrderList) for i, v in ipairs(tmpOrderList) do if v > 0 then --普通宠物 if self.selectPetCfg == nil then self.selectPetCfg = self.normalLevelPetDic[v][1] end self.loopScroll_Pet:AddData(v, 0) end end --神宠 local itemParent = self.group_GodPet[1].gameObject.transform.parent for i, v in ipairs(self.normalLevelPetDic[-1]) do local item = self.group_GodPet[i] if item == nil then item = self:InstantiateCollection(self.group_GodPet, self.group_GodPet[1].gameObject) item.gameObject.transform:SetParent(itemParent) end UIUtils.SetActive(self.group_GodPet.gameObject, true) --策划要求神宠用最高等级的头像 UIUtils.SetImageByAssetBundle(item.img_Pet, DataSheetManager.PetData:GetDataByID_Stage(v.ID, MDL.Pet.PetState.Ultimate).PetIcon) -- 目前只有日本地区区分彩金和暗金宠物底图,其他地区品质同意为金色。 self:SetPetFrameImage(item.img_Qua, DataSheetManager.PetData:GetDataByID_Stage(v.ID, MDL.Pet.PetState.Ultimate).PetQualityFrame) end self.group_GodPet.gameObject.transform:SetAsLastSibling() self:OnSelectPet(self.selectPetCfg) end function UIPetIllustratedHandbook:OnButtonClicked(comp) if comp == self.UIPetPopUpBig.btn_Close or comp == self.btn_Close then self:CloseView(true) elseif comp == self.btn_Get1 then CTL.ItemSources.ExecuteSourceFunctionById(self.petSource[1], DataSheetManager.PetData:GetDataByID_Stage(self.selectPetCfg.ID, self.petState)) elseif comp == self.btn_Get2 then CTL.ItemSources.ExecuteSourceFunctionById(self.petSource[2], SOURCE_ITEM_ID) elseif comp == self.btn_Reward then if self.canGetReward then MDL.Pet.RewardPetWeekBreedReq(2) else local _, hasReward = MDL.Pet.GetDailyCatchInfo() if hasReward then CTL.Tips.AddTipsMsg(Const_IDS["IDS_MonthCard_CardHint5"]) end UIUtils.SetActive(self.info_Reward, true) self:ShowRewardPreview() end elseif comp == self.btn_CloseReward then UIUtils.SetActive(self.info_Reward, false) else for i, v in ipairs(self.group_Attr) do if comp == v.btn then CTL.Pet.ShowTalentDesc(self.selectPetCfg, nil, i, v.obj_tips) return end end for i, v in ipairs(self.group_Genernation) do if comp == v.btn_Skill then if i == 1 then CTL.Pet.ShowSkillTips(self.selectPetCfg.TalentSkill[1]) else CTL.Pet.ShowSkillTips(self.selectPetCfg.ChildTalentSkill[i - 1]) end return end end local petCfg = DataSheetManager.PetData:GetDataByID_Stage(self.selectPetCfg.ID, MDL.Pet.PetState.Mutation) for i, v in ipairs(self.group_Variation) do if comp == v.btn_Skill then if i == 1 then CTL.Pet.ShowSkillTips(self.selectPetCfg.TalentSkill[1]) elseif i <= 3 then CTL.Pet.ShowSkillTips(petCfg.ChildTalentSkill[i - 1]) else CTL.Pet.ShowSkillTips(petCfg.TalentSkill[i - 3]) end return end end for i, v in ipairs(self.group_GodPet) do if v.click_Pet == comp then self:OnSelectGodPet(i) return end end for i, v in ipairs(self.group_God) do if comp == v.btn_Skill then CTL.Pet.ShowSkillTips(v.skillId) return end end end end function UIPetIllustratedHandbook:OnBackButtonPressed() self:OnButtonClicked(self.UIPetPopUpBig.btn_Close) end function UIPetIllustratedHandbook:OnCellClicked(scrollRect, index, cellTable, target, data) if scrollRect == self.ChestRewardScroll then UTL.ItemTips.ShowCommonTipsById(data.ItemID) else if self.selectPetImg then UIUtils.SetActive(self.selectPetImg, false) end local petList = self.normalLevelPetDic[data] for i, v in ipairs(cellTable.pet_Arr) do if target == v.rect_Click then self.selectPetCfg = petList[i] UIUtils.SetActive(v.img_Select, true) self.selectPetImg = v.img_Select self:OnSelectPet(petList[i]) break end end end end function UIPetIllustratedHandbook:OnSelectGodPet(index) if self.selectPetImg then UIUtils.SetActive(self.selectPetImg, false) end self.selectPetCfg = self.normalLevelPetDic[-1][index] self.selectPetImg = self.group_GodPet[index].img_Select UIUtils.SetActive(self.selectPetImg, true) self:OnSelectPet(self.selectPetCfg) end function UIPetIllustratedHandbook:OnCellInit(scrollRect, index, cellTable, data) if scrollRect == self.ChestRewardScroll then UTL.Item.SetItemCell(cellTable.item, data.ItemID, data.ItemNum) else local level = data cellTable.txt_Lv.text = string.FormatByIdsId(Const_IDS.IDS_Pet_CatchLevel, UTL.Item.GetNobilityByTeamLevel(level)) local petList = self.normalLevelPetDic[level] for i, v in ipairs(cellTable.pet_Arr) do if petList[i] then UIUtils.SetActive(v.gameObject, true) self:SetPetCellItem(v, petList[i]) else UIUtils.SetActive(v.gameObject, false) end end end end function UIPetIllustratedHandbook:SetPetCellItem(comp, data) local petState = self.petState or 0 if petState == 0 then UIUtils.SetImageByAssetBundle(comp.img_Pet, data.PetIcon) else UIUtils.SetImageByAssetBundle(comp.img_Pet, DataSheetManager.PetData:GetDataByID_Stage(data.ID, petState).PetIcon) end if self.selectPetCfg.ID == data.ID then UIUtils.SetActive(comp.img_Select, true) self.selectPetImg = comp.img_Select else UIUtils.SetActive(comp.img_Select, false) end -- 目前只有日本地区区分彩金和暗金宠物底图,其他地区品质同意为金色。 self:SetPetFrameImage(comp.img_Quality, data.PetQualityFrame) end function UIPetIllustratedHandbook:OnClosed() UIManager.ActiveUIModle(true, "UIPetIllustratedHandbook") UTL.UIRender.DisposeModelComponentData(self.modelComponentDataHandle) end function UIPetIllustratedHandbook:OnSelectPet(petConfig) local isChangeQuality = false local isActive = self.toggles_Btn:GetToggle(2).gameObject.activeSelf if isActive and petConfig.Quality == MDL.Pet.PetQuality.Normal then isChangeQuality = true elseif isActive == false and petConfig.Quality == MDL.Pet.PetQuality.God then isChangeQuality = true end self:UpdateToggle(petConfig.Quality) if isChangeQuality then self.toggles_Btn:SelectIndex(0) else if self.petState then self.toggles_Btn:SelectIndex(self.petState) else self.toggles_Btn:SelectIndex(0) end end end function UIPetIllustratedHandbook:UpdateToggle(quality) if quality == MDL.Pet.PetQuality.Normal then self.toggles_Btn:SetToggleActive(3, false) self.toggles_Btn:GetToggle(0):SetText(Const_IDS.IDS_PetGeneral) self.toggles_Btn:GetToggle(1):SetText(Const_IDS.IDS_PetVariation) else self.toggles_Btn:SetToggleActive(3, true) self.toggles_Btn:GetToggle(0):SetText(Const_IDS.IDS_PetAdvance1) self.toggles_Btn:GetToggle(1):SetText(Const_IDS.IDS_PetAdvance2) self.toggles_Btn:GetToggle(2):SetText(Const_IDS.IDS_PetAdvance3) end end function UIPetIllustratedHandbook:LoadModel(petConfig) UTL.UIRender.DisposePlayerModel(self.modelComponentDataHandle) UTL.UIRender.SetLayerActive(self.modelComponentDataHandle, false) UTL.UIRender.CreateRTSceneTrans(self.modelComponentDataHandle, petConfig.PetModelLight) local modelPath, modelScale, showEquipmentID, renderID, idleAnimCilp, heroEffectPath, psEffectPath, modelXYZ, modelRot = CTL.Pet.GetRenderTextureModelParam(petConfig, self.__viewClassPath) UTL.UIRender.CreateRTRenderModel(self.modelComponentDataHandle, modelPath, modelScale, showEquipmentID, renderID, idleAnimCilp, heroEffectPath, psEffectPath) UTL.UIRender.SetRTRootParam(self.modelComponentDataHandle, modelXYZ, modelRot) UIUtils.SetLabelText(self.txt_PetName, Const_IDS[petConfig.PetName]) end function UIPetIllustratedHandbook:OnValueChanged(comp, index) self:OnSelectPetState(index) end function UIPetIllustratedHandbook:UpdatePetSource(petConfig) self.petSource = petConfig.PetSource if #petConfig.PetSource > 0 then if petConfig.Stage == MDL.Pet.PetState.Basic then self.obj_state:SetState(1) self.btn_Get1:SetText(Const_IDS[DataSheetManager.ItemSource:GetDataByID(petConfig.PetSource[1]).Activity]) if #petConfig.PetSource > 1 then UIUtils.SetActive(self.btn_Get2, true) self.btn_Get2:SetText(Const_IDS[DataSheetManager.ItemSource:GetDataByID(petConfig.PetSource[2]).Activity]) else UIUtils.SetActive(self.btn_Get2, false) end else self.obj_state:SetState(0) UIUtils.SetLabelText(self.txt_GetWay, Const_IDS.IDS_Pet_GetBianYi) end else self.obj_state:SetState(0) UIUtils.SetLabelText(self.txt_GetWay, CONST_DESC[petConfig.ID]) end end function UIPetIllustratedHandbook:OnSelectPetState(petState) self.petState = petState if self.selectPetCfg.Quality == MDL.Pet.PetQuality.Normal then if petState == MDL.Pet.PetState.Basic then self.state_Skills:SetState(0) CTL.Pet.SetTalentSkillCell(self.selectPetCfg.TalentSkill[1], self.group_Genernation[1].sprite_Skill) CTL.Pet.SetTalentSkillCell(self.selectPetCfg.ChildTalentSkill[1], self.group_Genernation[2].sprite_Skill) CTL.Pet.SetTalentSkillCell(self.selectPetCfg.ChildTalentSkill[2], self.group_Genernation[3].sprite_Skill) --血脉的星级(1代、2代) UIUtils.SetActive(self.Info_Qua, true) UIUtils.SetActive(self.group_Star.gameObject, false) UIUtils.SetActive(self.txt_Gen1, true) self:FormatPetLineageStar(self.txt_Gen1, self.selectPetCfg.PetLineage, 1, UIUtils.GetLocalizedTxt(Const_IDS.IDS_PetFirst)) local petPedigree = self:FormatPetLineageStar(self.txt_Gen2, self.selectPetCfg.PetLineage, 3, UIUtils.GetLocalizedTxt(Const_IDS.IDS_PetSecond)) --资质 self:SetAttrShow(self.selectPetCfg) self:LoadModel(self.selectPetCfg) self:UpdatePetSource(self.selectPetCfg) self.txt_BaseAttr.text = CTL.Pet.CalcuGrowUpScore(CTL.Pet.GetMaxAptitude(self.selectPetCfg, petPedigree, false), petPedigree, false) else self.state_Skills:SetState(1) --变异宠物 local petCfg = DataSheetManager.PetData:GetDataByID_Stage(self.selectPetCfg.ID, petState) CTL.Pet.SetTalentSkillCell(self.selectPetCfg.TalentSkill[1], self.group_Variation[1].sprite_Skill) CTL.Pet.SetTalentSkillCell(petCfg.ChildTalentSkill[1], self.group_Variation[2].sprite_Skill) CTL.Pet.SetTalentSkillCell(petCfg.ChildTalentSkill[2], self.group_Variation[3].sprite_Skill) if petCfg.TalentSkill[1] then UIUtils.SetActive(self.group_Variation[4].gameObject, true) CTL.Pet.SetTalentSkillCell(petCfg.TalentSkill[1], self.group_Variation[4].sprite_Skill) else UIUtils.SetActive(self.group_Variation[4].gameObject, false) end if petCfg.TalentSkill[2] then UIUtils.SetActive(self.group_Variation[5].gameObject, true) CTL.Pet.SetTalentSkillCell(petCfg.TalentSkill[2], self.group_Variation[5].sprite_Skill) else UIUtils.SetActive(self.group_Variation[5].gameObject, false) end --血脉的星级(1代、2代) UIUtils.SetActive(self.Info_Qua, true) UIUtils.SetActive(self.group_Star.gameObject, false) UIUtils.SetActive(self.txt_Gen1, false) local petPedigree = self:FormatPetLineageStar(self.txt_Gen2, petCfg.PetLineage, 3, UIUtils.GetLocalizedTxt(Const_IDS.IDS_PetSecond)) --资质 self:SetAttrShow(petCfg) self:LoadModel(petCfg) self:UpdatePetSource(petCfg) self.txt_BaseAttr.text = CTL.Pet.CalcuGrowUpScore(CTL.Pet.GetMaxAptitude(petCfg, petPedigree, false), petPedigree, false) end self.loopScroll_Pet:RefreshCells(false) else self.state_Skills:SetState(2) table.clearArray(self.godSkillArray) local petCfg = DataSheetManager.PetData:GetDataByID_Stage(self.selectPetCfg.ID, petState) local index = 0 for i, skillId in ipairs(petCfg.TalentSkill) do table.insert(self.godSkillArray, skillId) end for i, skillId in ipairs(petCfg.ChildTalentSkill) do table.insert(self.godSkillArray, skillId) end table.sort(self.godSkillArray, MDL.Pet.SortSkill) for i, skillId in ipairs(self.godSkillArray) do index = index + 1 local comp = self.group_God[index] if comp then comp.skillId = skillId UIUtils.SetActive(comp.gameObject, true) CTL.Pet.SetTalentSkillCell(skillId, comp.sprite_Skill) end end for i = index + 1, #self.group_God do UIUtils.SetActive(self.group_God[i].gameObject, false) end --神宠的血脉直接读常量 UIUtils.SetActive(self.Info_Qua, false) UIUtils.SetActive(self.group_Star.gameObject, true) CTL.Pet.SetPetStar(self.group_Star, DataSheetManager.ConstData:GetDataByID("GodPetLineage").IntValue, 1) --资质 self:SetAttrShow(petCfg) self:LoadModel(petCfg) self:UpdatePetSource(petCfg) self.txt_BaseAttr.text = CTL.Pet.CalcuGrowUpScore(CTL.Pet.GetMaxAptitude(petCfg, 10, true), 10, true) end end function UIPetIllustratedHandbook:FormatPetLineageStar(txt, petLineage, type, generation) local petLineageCfg = DataSheetManager.PetLineage:GetDataByLineageID_LineageType_ParentStar(petLineage, type, 0) local start_min = petLineageCfg.Lineage_Table[1].LineageStar local start_max = petLineageCfg.Lineage_Table[#petLineageCfg.Lineage_Table].LineageStar if self.petState == MDL.Pet.PetState.Basic then txt.text = string.FormatByIdsId(Const_IDS.IDS_Pet_LineageRange, generation, CTL.Pet.GetPetPedigreeImgText(start_min), CTL.Pet.GetPetPedigreeImgText(start_max)) else txt.text = string.format("%s(%s)", generation, CTL.Pet.GetPetPedigreeImgText(start_max)) end return start_max end function UIPetIllustratedHandbook:SetAttrShow(petCfg) --神宠资质需要读下一行数据来显示 local nextPetCfg if petCfg.Quality == MDL.Pet.PetQuality.God and petCfg.Stage ~= MDL.Pet.PetState.Ultimate then nextPetCfg = DataSheetManager.PetData:GetDataByID_Stage(petCfg.ID, petCfg.Stage + 1) end local isNormal = petCfg.Quality == MDL.Pet.PetQuality.Normal and petCfg.Stage == MDL.Pet.PetState.Basic for i, v in ipairs(self.group_Attr) do local talentVal = petCfg.Talent_Table[i] if talentVal then UIUtils.SetActive(v.gameObject, true) if nextPetCfg then self:SetAttrItem(v, talentVal, nextPetCfg.Talent_Table[i], isNormal) else self:SetAttrItem(v, talentVal, nil, isNormal) end else UIUtils.SetActive(v.gameObject, false) end end end function UIPetIllustratedHandbook:SetAttrItem(comp, talentVal, nextTalentVal, isNormal) CTL.Pet.SetTalentIcon(talentVal.TalentType, comp.lab_HP, comp.sprite_HP) local min = talentVal.TalentMin local max = nextTalentVal and nextTalentVal.TalentMin or talentVal.TalentMax if max > min then if isNormal then comp.txt_HPPresent.text = min + FAKE_PET_PEDIGREE_EXTRA .. "-" .. max + FAKE_PET_PEDIGREE else comp.txt_HPPresent.text = min + FAKE_PET_PEDIGREE .. "-" .. max + FAKE_PET_PEDIGREE end else comp.txt_HPPresent.text = FAKE_PET_PEDIGREE + min end end function UIPetIllustratedHandbook:OnGlobalInfoUpdate() self:UpdateRewardInfo() end function UIPetIllustratedHandbook:UpdateRewardInfo() local totalTimes = DataSheetManager.ActivityData:GetDataByID(LuaConst.ActivityType.PetCatch).DailyRefreshTimes local times, hasReward = MDL.Pet.GetDailyCatchInfo() if times >= totalTimes and hasReward == false then self.canGetReward = true self.btn_Reward:SetRedPoint(true) else self.canGetReward = false self.btn_Reward:SetRedPoint(false) end self.txt_Times.text = times .. "/" .. totalTimes end function UIPetIllustratedHandbook:ShowRewardPreview() if self.hasInitReward then return end local rewardId = DataSheetManager.ConstData:GetDataByID("PetCatchdailyTaskRewardID").IntValue local rewardCfg = DataSheetManager.PetTaskRewardRepeat:GetDataByID(rewardId) self.ChestRewardScroll:ReloadAll(rewardCfg.Item_Table) self.hasInitReward = true end function UIPetIllustratedHandbook:OnDrag(comp, eventData) UTL.UIRender.RotateEntity(self.modelComponentDataHandle, -eventData.delta.x * 0.2, false, false) end -- comp为需要设置图的组件 -- data为宠物的表中的 PetQualityFrame 图 function UIPetIllustratedHandbook:SetPetFrameImage(comp, data) -- 目前只有日本地区区分彩金和暗金宠物底图,其他地区品质同意为金色。 if GameAppInfo.IsJapanesePackage() then UTL.Color.SetQualityImageByType(comp, data, UTL.Color.QualityType.PetFrame) end end return UIPetIllustratedHandbook