using System.Collections.Generic; using Common.Utility.CombatEvent; using Core.Utility; using Fort23.Core; using Fort23.UTool; using GameLogic.Bag; namespace GameLogic.Hero { public class HeroController { /// /// 所有英雄 /// public Dictionary allHeroDic = new Dictionary(); /// /// 也可以叫主力(afk的共鸣英雄),替补英雄等级=主力英雄的最低等级(和afk一样的) /// 主力英雄不一定等于上阵英雄,主力英雄只是决定了共鸣等级 /// public Dictionary heroDicInLead = new Dictionary(4); /// /// 后备英雄(共享等级) /// public Dictionary heroDicInBack = new Dictionary(); public bool CanUpgrade(HeroInfo heroInfo) { return BagController.Instance.IsEnough(GlobalParam.Item_HeroExp_ID, heroInfo.powerUpConfig.levelUpExp); } /// /// 英雄升级逻辑,主要是改数据,不在这里做UI表现 /// /// public HeroUpFailType UpgradeHeroLogic(HeroInfo heroInfo) { if (PlayerManager.Instance.gameConstantConfig.maxLv <= heroInfo.level.Value) { LogTool.Log("已到达最高等级:" + PlayerManager.Instance.gameConstantConfig.maxLv); return HeroUpFailType.MaxLv; } if (BagController.Instance.DuctHeroExp(heroInfo.powerUpConfig.levelUpExp)) { heroInfo.Upgrade(); SendEvent(HeroUpType.Level, heroInfo, HeroUpFailType.Succeed); return HeroUpFailType.Succeed; } else { return HeroUpFailType.HeroExp; } } /// /// 发送英雄提升的事件 /// /// 提升类型:升级、升星等. private void SendEvent(HeroUpType upType, HeroInfo heroInfo, HeroUpFailType failType = HeroUpFailType.None) { HeroPowerUpEventData data = new HeroPowerUpEventData(); data.heroModelID = heroInfo.modelID; data.upType = upType; data.failType = failType; PlayerManager.Instance.lastHeroInfo = heroInfo; EventManager.Instance.Dispatch(CustomEventType.HeroPowerUp, data); if (upType == HeroUpType.Level) { EventManager.Instance.Dispatch(CustomEventType.HeroLvUp, data); } else if (upType == HeroUpType.Promote) { EventManager.Instance.Dispatch(CustomEventType.HeroPromote, data); } } public void InitHeroes() { for (int i = 0; i < AccountFileInfo.Instance.playerData.HeroListData.Count; i++) { AccountFileInfo.HeroData heroData = AccountFileInfo.Instance.playerData.HeroListData[i]; HeroInfo heroInfo = new HeroInfo(); heroInfo.InitHero(heroData); AddHero(heroInfo); } } /// /// 获取英雄 /// /// 英雄ID modelID /// public CombatHeroInfo GetHeroInfo(int modelID) { if (allHeroDic.ContainsKey(modelID)) { return allHeroDic[modelID]; } LogTool.Error("没有这个英雄" + modelID); return null; } /// /// 添加英雄 /// /// public void AddHero(HeroInfo heroInfo) { if (heroInfo.isLead) { DeployHeroToLead(heroInfo); } else { DeployHeroToBack(heroInfo); } } /// /// 进入主力队伍 /// /// public void DeployHeroToLead(HeroInfo heroInfo) { if (heroDicInLead.Count >= GlobalParam.Max_Deploy_HERO) { return; } if (heroDicInLead.ContainsKey(heroInfo.modelID)) { LogTool.Error("heroDicInLead不应该出现相同的英雄ID=" + heroInfo.modelID); return; } heroDicInLead.Add(heroInfo.modelID, heroInfo); heroInfo.isLead = true; allHeroDic.Add(heroInfo.modelID, heroInfo); } /// /// 更换主力 /// /// public void ChangeLeadHero(HeroInfo backHero, HeroInfo leadHero) { if (!heroDicInLead.ContainsKey(leadHero.modelID)) { LogTool.Error("不是主力" + leadHero.modelID); return; } if (!heroDicInBack.ContainsKey(backHero.modelID)) { LogTool.Error("不是替补" + backHero.modelID); return; } //从主力中移除,并加入后补 heroDicInLead.Remove(leadHero.modelID); DeployHeroToBack(leadHero); //从后补中移除,并加入主力 heroDicInBack.Remove(backHero.modelID); DeployHeroToLead(backHero); } /// /// 进入后备队伍(英雄背包) /// /// public void DeployHeroToBack(HeroInfo heroInfo) { if (heroDicInBack.ContainsKey(heroInfo.modelID)) { LogTool.Error("heroDicInBack不应该出现相同的英雄ID=" + heroInfo.modelID); return; } heroDicInBack.Add(heroInfo.modelID, heroInfo); heroInfo.isLead = false; allHeroDic.Add(heroInfo.modelID, heroInfo); } } }