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);
}
}
}