local DivineWeaponForgeSoul_Controller = {} local private = {} local EventSystem = require('Event/EventSystem') local SHOWED_WEAPON_FORGE_SOUL_POP_UP = "SHOW_WEAPON_FORGE_SOUL_POP_UP" local lockLittlePlotIcon = "Assets/UI/Dynamic/UI_WeaponSoul/tmjx_bg_30.png" local maxBallNum = 4 --最多光球数 function DivineWeaponForgeSoul_Controller.OnStartup() EventSystem.Regist(EventID.FunctionUnlockUpdate, private.RefreshInfoByFunction) private.weaponSoulSumMaxLv = DataSheetManager.MagicWeaponForgeSoulLevel:GetDataCount() - 1 local weaponSoulMaxSkillLv = DataSheetManager.MagicWeaponForgeSoulEffect:GetDataCount() private.maxLvSoulSkills = {} for i = 1, maxBallNum do table.insert(private.maxLvSoulSkills, weaponSoulMaxSkillLv) end end function private.RefreshInfoByFunction(funcId, isUnlock) if funcId == MDL.Unlock.FunctionType.WeaponForgeSoul then EventSystem.Dispatch(EventID.UI_DivineWeapon_ForgeSoul_Update) end end --预览最高级时,显示的光球技能配置 function DivineWeaponForgeSoul_Controller.GetWeaponSoulMaxLvSkills() return private.maxLvSoulSkills end --未解锁时,显示的光球技能配置 function DivineWeaponForgeSoul_Controller.GetWeaponSoulLockLvSkills() return {1,0,0,0} end --region 天命开启弹窗相关 function DivineWeaponForgeSoul_Controller.TryOpenForgeSoulOpenPanel(weaponId) local isShowForgeSoul = MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.WeaponForgeSoul) and CTL.DivineWeapon.IsDivineWeaponForgeMax(weaponId) and CTL.HeroSelect.IsSuperGoldHero(weaponId) if isShowForgeSoul and not private.GetIsShowedForgeSoulPopUp(weaponId) then UIManager.OpenView(Const_UI_Lua.UIEnum.UIWeaponForgeSoulOpenPanel,{heroId = weaponId}) end end --本地获取/存储天命开启弹窗,只显示一次 function private.GetIsShowedForgeSoulPopUp(heroId) local value = PersistentData.PlayerData:Get(SHOWED_WEAPON_FORGE_SOUL_POP_UP..heroId, false) return value end function DivineWeaponForgeSoul_Controller.SetIsShowedForgeSoulPopUp(heroId) PersistentData.PlayerData:Set(SHOWED_WEAPON_FORGE_SOUL_POP_UP..heroId, true, true) EventSystem.Dispatch(EventID.UI_DivineWeapon_ForgeSoul_Update) end --endregion --刷新四个小点的表现,界面共用接口 function DivineWeaponForgeSoul_Controller.RefreshSoulFourLittlePoint(collection, plotslv) for i, soulLittlePlot in ipairs(collection) do if plotslv[i] == 0 then soulLittlePlot.effect_ForgeSoul:StopUIEffect() UIUtils.SetImageByAssetBundle(soulLittlePlot.img_ForgeSoul, lockLittlePlotIcon) else local cfg = DataSheetManager.MagicWeaponForgeSoulEffect:GetDataByMagicWeaponForgeSoulSkillLevel(plotslv[i]) UIUtils.SetImageByAssetBundle(soulLittlePlot.img_ForgeSoul, cfg.ForgeSoulSkillIconSmallBG) soulLittlePlot.effect_ForgeSoul:PlayUIEffect(cfg.ForgeSoulSkillEffect, -1) end end end --heroNum 需要满足条件的英雄个数 --weaponLv 神兵突破等级条件 --skillLv 当前技能等级,当等级为1时,需换ids function DivineWeaponForgeSoul_Controller.IsMeetUpLvCondition(heroNum, weaponLv, skillLv) local isMeet = private.GetMeetWeaponlvConditionHeroNum(weaponLv) >= heroNum local str if skillLv and skillLv == 1 then if isMeet then str = UIUtils.GetLocalizedTxt(Const_IDS.IDS_WeaponForgeSoul_SoulHint_15) else str = string.FormatByIdsId(Const_IDS["IDS_WeaponForgeSoul_LevelHint_7"], heroNum) end else if isMeet then str = UIUtils.GetLocalizedTxt(Const_IDS.IDS_WeaponForgeSoul_SoulHint_15) else str = string.FormatByIdsId(Const_IDS["IDS_WeaponForgeSoul_LevelHint_3"], heroNum, weaponLv) end end if isMeet then return true, UTL.Color.FormatTextByColor("3b6f2d", str) else return false, UTL.Color.FormatTextByColor("a73a1d", str) end end function private.GetMeetWeaponlvConditionHeroNum(weaponLv) local superHeroNum = 0 for i, v in DataSheetManager.HeroNum:GetEnumerator() do if v.HeroQuality == LuaConst.QualityColor.DarkGold and MDL.HeroSelect.IsHasHero(v.ID) then if MDL.HeroSelect.GetHeroInfo(v.ID).magicWeaponLevel >= weaponLv then superHeroNum = superHeroNum + 1 end end end return superHeroNum end function DivineWeaponForgeSoul_Controller.IsWeaponForgeSoulMax(weaponId) local weaponData = DataSheetManager.MagicWeaponData:GetDataByMagicWeaponID(weaponId) if weaponData.MagicWeaponQuality == LuaConst.QualityColor.DarkGold then return MDL.DivineWeaponForgeSoul.GetWeaponForgeSoulLv(weaponId) >= private.weaponSoulSumMaxLv end return true end function DivineWeaponForgeSoul_Controller.CaculateWeaponSoulSkillGs(heroId) local soulInfo = MDL.DivineWeaponForgeSoul.GetWeaponForgeSoulInfo(heroId) local skillGs = 0 if soulInfo then for skillId, level in pairs(soulInfo) do if level > 0 then skillGs = skillGs + DataSheetManager.MagicWeaponForgeSoulSkill:GetDataByForgeSoulSkillID_ForgeSoulSkillLevel(skillId, level).ForgeSoulSkillGS end end end return skillGs end function DivineWeaponForgeSoul_Controller.GetDefaultSelectedSkill(heroId) local skillsLv = MDL.DivineWeaponForgeSoul.GetWeaponForgeSoulSkillsLv(heroId) local index = 1 for i, v in ipairs(skillsLv) do if v > 0 then index = i end end return index end --region 红点 function DivineWeaponForgeSoul_Controller.RefreshDivineWeaponForgeSoulRedPoint() if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.WeaponForgeSoul) then CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.WeaponBtn_WeaponView_ForgeSoul) return end for i, v in DataSheetManager.HeroNum:GetEnumerator() do if v.HeroQuality == LuaConst.QualityColor.DarkGold then if MDL.Player.HeroIsLineUp(v.ID) and DivineWeaponForgeSoul_Controller.GetIsShowRedpoint(v.ID) then --是否显示彩金铸魂红点 CTL.RedPoint.AddRedPoint(CTL.RedPoint.RedPointKey.WeaponBtn_WeaponView_ForgeSoul) return end end end CTL.RedPoint.RemoveRedPoint(CTL.RedPoint.RedPointKey.WeaponBtn_WeaponView_ForgeSoul) end function DivineWeaponForgeSoul_Controller.GetIsShowRedpoint(heroId) if not MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.WeaponForgeSoul) then return false end if MDL.HeroSelect.GetHeroDataById(heroId).HeroQuality ~= LuaConst.QualityColor.DarkGold then return false end if not CTL.DivineWeapon.IsDivineWeaponForgeMax(heroId) then return false end if not private.GetIsShowedForgeSoulPopUp(heroId) then return true end if private.IsCanLevelUp(heroId) then return true end return false end function private.IsCanLevelUp(heroId) local skillsLv = MDL.DivineWeaponForgeSoul.GetWeaponForgeSoulSkillsLv(heroId) if skillsLv then for i, lv in ipairs(skillsLv) do if DivineWeaponForgeSoul_Controller.IsPlotCanLevelUp(heroId, i, lv) then return true end end end return false end --endregion function DivineWeaponForgeSoul_Controller.IsPlotCanLevelUp(heroId, index, skillLevel) local skillsId = DataSheetManager.MagicWeaponForgeSoulData:GetDataByMagicWeaponID(heroId).ForgeSoulSkill local lv = skillLevel or MDL.DivineWeaponForgeSoul.GetWeaponForgeSoulSkillLv(heroId, skillsId[index]) local succ, skillcfg = DataSheetManager.MagicWeaponForgeSoulSkill:TryGetDataByForgeSoulSkillID_ForgeSoulSkillLevel(skillsId[index], lv + 1) if succ and DivineWeaponForgeSoul_Controller.IsMeetUpLvCondition(skillcfg.ForgeSoulSkillPictorialHeroNum, skillcfg.ForgeSoulSkillPictorialFoundryNum) then for i, v in ipairs(skillcfg.Item_Table) do local haveCount = MDL.Bag.GetItemCount(v.ItemID) if v.ItemNum > haveCount then return false end end return true end return false end --region 处理服务器发来的其他玩家的天命数据,输出天命技能等级数据 --CommonShowRoleHeadInfo 中定义的是 map weaponSoul function DivineWeaponForgeSoul_Controller.GetWeaponSoulSkillByProtoMap(heroId, weaponSoulProtoMap) if not IsProtoDataNotNil(weaponSoulProtoMap) then return end local weaponSoulMap = NetManager.ChangeProtoMapToLua(weaponSoulProtoMap) local skillsId = DataSheetManager.MagicWeaponForgeSoulData:GetDataByMagicWeaponID(heroId).ForgeSoulSkill local skillsLv = {} for index, skillId in ipairs(skillsId) do if weaponSoulMap[skillId] then table.insert(skillsLv, weaponSoulMap[skillId]) else table.insert(skillsLv, 0) end end return skillsLv end --RoleSceneBasic 中定义的是 base.WeaponSoulSceneInfo weaponSoulInfo function DivineWeaponForgeSoul_Controller.GetWeaponSoulSkillByWeaponSoulSceneInfo(heroId, weaponSoulInfo) if not weaponSoulInfo.isActive then return nil end local forgeSoulSkill = DataSheetManager.MagicWeaponForgeSoulData:GetDataByMagicWeaponID(heroId).ForgeSoulSkill local skillsLv = {} for _, skillId in ipairs(forgeSoulSkill) do for _, v in ipairs(weaponSoulInfo.skillSceneInfo) do if skillId == v.skillId then table.insert(skillsLv, v.level) end end end return skillsLv end --endregion return DivineWeaponForgeSoul_Controller