123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- 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
- {
- /// <summary>
- /// 所有英雄
- /// </summary>
- public Dictionary<int, HeroInfo> allHeroDic = new Dictionary<int, HeroInfo>();
-
- /// <summary>
- /// 也可以叫主力(afk的共鸣英雄),替补英雄等级=主力英雄的最低等级(和afk一样的)
- /// 主力英雄不一定等于上阵英雄,主力英雄只是决定了共鸣等级
- /// </summary>
- public Dictionary<int, HeroInfo> heroDicInLead = new Dictionary<int, HeroInfo>(4);
- /// <summary>
- /// 后备英雄(共享等级)
- /// </summary>
- public Dictionary<int, HeroInfo> heroDicInBack = new Dictionary<int, HeroInfo>();
- public bool CanUpgrade(HeroInfo heroInfo)
- {
- return BagController.Instance.IsEnough(GlobalParam.Item_HeroExp_ID, heroInfo.powerUpConfig.levelUpExp);
- }
- /// <summary>
- /// 英雄升级逻辑,主要是改数据,不在这里做UI表现
- /// </summary>
- /// <param name="heroInfo"></param>
- 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;
- }
- }
-
- /// <summary>
- /// 发送英雄提升的事件
- /// </summary>
- /// <param name="upType">提升类型:升级、升星等.</param>
- 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);
- }
- }
-
- /// <summary>
- /// 获取英雄
- /// </summary>
- /// <param name="modelID">英雄ID modelID</param>
- /// <returns></returns>
- public CombatHeroInfo GetHeroInfo(int modelID)
- {
- if (allHeroDic.ContainsKey(modelID))
- {
- return allHeroDic[modelID];
- }
-
- LogTool.Error("没有这个英雄" + modelID);
- return null;
- }
-
-
- /// <summary>
- /// 添加英雄
- /// </summary>
- /// <param name="heroInfo"></param>
- public void AddHero(HeroInfo heroInfo)
- {
- if (heroInfo.isLead)
- {
- DeployHeroToLead(heroInfo);
- }
- else
- {
- DeployHeroToBack(heroInfo);
- }
- }
- /// <summary>
- /// 进入主力队伍
- /// </summary>
- /// <param name="heroInfo"></param>
- 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);
- }
- /// <summary>
- /// 更换主力
- /// </summary>
- /// <param name="heroInfo"></param>
- 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);
-
-
- }
-
- /// <summary>
- /// 进入后备队伍(英雄背包)
- /// </summary>
- /// <param name="heroInfo"></param>
- 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);
- }
-
-
-
- }
- }
|