123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737 |
- //#define FIGHT_TEST
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using System;
- using DG.Tweening;
- using BehaviorDesigner.Runtime;
- using BehaviorDesigner.Runtime.Tasks;
- using UnityEngine.AI;
- using YLBattle;
- using UnityGameFramework.Runtime;
- using AdonGameKit;
- using Adon.Game.BO;
- /// <summary>
- /// 角色管理者
- /// </summary>
- public class RoleManager : MonoBehaviour
- {
- // <summary>
- /// 单键
- /// </summary>
- private static RoleManager m_Instance;
- /// <summary>
- /// 已创建的怪物角色
- /// </summary>
- public Dictionary<int, List<Role>> mCreateMonsterRoles = new Dictionary<int, List<Role>>();
- /// <summary>
- /// 玩家创建的角色
- /// </summary>
- private Dictionary<int, Role> mPlayerRoles = new Dictionary<int, Role>();
- private Dictionary<int, Role> mFriendRoles = new Dictionary<int, Role>();
- ///// <summary>
- ///// 玩家镜像角色
- ///// </summary>
- //private List<Role> mMirrorPlayerRoles = new List<Role>();
- /// <summary>
- /// 英雄的数据
- /// </summary>
- private List<GameHeroVo> mHeroVos = new List<GameHeroVo>();
- ///// <summary>
- ///// 玩家镜像的英雄数据
- ///// </summary>
- //private List<GameHeroVo> mMirrorHeroVos = new List<GameHeroVo>();
- /// <summary>
- /// 当前的区域
- /// </summary>
- private int mCurArea = 1;
- /// <summary>
- /// 创建的言灵
- /// </summary>
- private Dictionary<int, YanLingBattleInfo> mCreateYanLings = new Dictionary<int, YanLingBattleInfo>();
- /// <summary>
- /// 本场角色资源数据
- /// </summary>
- private Dictionary<string, int> mRoleRes = new Dictionary<string, int>();
- /// <summary>
- /// 镜像的行为树
- /// </summary>
- private List<BehaviorTree> mMirrorBTS = new List<BehaviorTree>();
- private List<Role> mMonsterList = new List<Role>();
- /// <summary>
- /// 言灵资源
- /// </summary>
- private List<string> mYanLingRess = new List<string>();
- private bool _bossLive = false;
- private Vector3 diePos;
- /// <summary>
- /// 传送门
- /// </summary>
- private ChuanSongMen chuanSongMen = null;
- public bool BoosLive
- {
- get
- {
- return this._bossLive;
- }
- }
- /// <summary>
- /// 刷新时间
- /// </summary>
- private float _refreshTime = 1.0f;
- /// <summary>
- /// 刷新计时器
- /// </summary>
- private float _refreshNowTime = 0.0f;
- /// <summary>
- /// 上次的玩家索引
- /// </summary>
- private int lastPlayerIndex = -1;
- private int curPlayerIndex = -1;
-
- /// <summary>
- /// 单键
- /// </summary>
- public static RoleManager Instance
- {
- get
- {
- if (m_Instance == null)
- {
- m_Instance = GameObject.Find("RoleManager").AddComponent<RoleManager>();
- }
- return m_Instance;
- }
- }
- public void SetFriendPosition(string uid, float x, float y, float z)
- {
- foreach (var r in this.mFriendRoles)
- {
- if (uid == r.Value.playerUID)
- {
- Vector3 pos = new Vector3(x, y, z);
- r.Value.mNavMeshAgent.SetDestination(pos);
- float speed = (pos - r.Value.transform.position).magnitude;
- if (speed > 1.0f)
- {
- speed = 1;
- }
- else if (speed < 0.05f)
- {
- speed = 0;
- }
- r.Value.mAnimator.SetFloat(Animator.StringToHash("ForwardSpeed"), speed);
- }
- }
- }
- public void SetFiendStatus(string uid, string propertyName, string pValue)
- {
- foreach (var r in this.mFriendRoles)
- {
- if (uid == r.Value.playerUID)
- {
- switch (propertyName)
- {
- case "SetBool":
- {
- Adon.Game.Data.StructData.Attack_MsgData msgData = new Adon.Game.Data.StructData.Attack_MsgData();
- CommonManager.Desrialize<Adon.Game.Data.StructData.Attack_MsgData>(msgData, pValue);
- BaseHero bh = r.Value.gameObject.GetComponent<BaseHero>();
- bh.SetAnimatorStatusAttack(msgData);
- }
- break;
- case "SetTrigger":
- r.Value.mAnimator.SetTrigger(int.Parse(pValue));
- break;
- case "DashAttack":
- {
- Adon.Game.Data.StructData.Rush_MsgData msgData = new Adon.Game.Data.StructData.Rush_MsgData();
- CommonManager.Desrialize<Adon.Game.Data.StructData.Rush_MsgData>(msgData, pValue);
- BaseHero bh = r.Value.gameObject.GetComponent<BaseHero>();
- bh.OnMsg_DashAttack(msgData);
- }
- break;
- case "Rush":
- {
- BaseHero bh = r.Value.gameObject.GetComponent<BaseHero>();
- bh.SetAnimatorStatusRush();
- }
- break;
- case "Skill":
- {
- BaseHero bh = r.Value.gameObject.GetComponent<BaseHero>();
- bh.SetAnimatorStatusSkill();
- }
- break;
- case "Idle":
- {
- BaseHero bh = r.Value.gameObject.GetComponent<BaseHero>();
- bh.SetAnimatorStatusIdle();
- }
- break;
- }
- //r.Value.mAnimator.SetBool(int.Parse(propertyName), bool.Parse(pValue));
- }
- }
- }
- public void SetDiePosition(Vector3 pos)
- {
- diePos = pos;
- }
- /// <summary>
- /// 获取玩家
- /// </summary>
- public Role GetPlayer(bool containHide = false)
- {
- foreach (var item in mPlayerRoles)
- {
- if (item.Value == null)
- {
- continue;
- }
- if (containHide)
- {
- return item.Value;
- }
- else if (item.Value.gameObject.activeSelf)
- {
- return item.Value;
- }
- }
- return null;
- }
- // 刷新玩家数据
- public void UpdatePlayerDate()
- {
- foreach (var item in mPlayerRoles)
- {
- if (item.Value == null)
- {
- continue;
- }
- BattleUnitBase battleUnitBase = item.Value as BattleUnitBase;
- battleUnitBase.Init(new YLBattleUnit(item.Value.mData.mHeroVo.mo, item.Value.mData.mHeroVo));
- }
- }
- /// <summary>
- /// 通过自然id 返回
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public Role GetRole(int id)
- {
- // 在我的英雄里查找
- foreach (var item in mPlayerRoles)
- {
- if (item.Value != null && id == item.Value.mData.UID)
- {
- return item.Value;
- }
- }
- // 在创建的怪物中查找
- foreach (var area in this.mCreateMonsterRoles)
- {
- foreach (var role in area.Value)
- {
- if (role != null && id == role.mData.UID)
- {
- return role;
- }
- }
- }
- return null;
- }
- /// <summary>
- /// 获取生存的怪物
- /// </summary>
- /// <returns></returns>
- public List<Role> GetLiveMonsters()
- {
- mMonsterList.Clear();
- foreach (var item in mCreateMonsterRoles)
- {
- foreach (var monster in item.Value)
- {
- mMonsterList.Add(monster);
- }
- }
- return mMonsterList;
- }
- /// <summary>
- /// 初始化英雄
- /// </summary>
- public void InitHeros(bool isGuide = false)
- {
- mCreateYanLings.Clear();
- mHeroVos.Clear();
- //mMirrorHeroVos.Clear();
- //mMirrorPlayerRoles.Clear();
- var teamVo = UserProxy.Instance.player.heroTeamConfig;
- Ins_TeamInfo curVo = teamVo.teamDic[teamVo.curUseTeamID];
- // 获取队伍角色
- for (int i = 0; i < curVo.heros.Count; i++)
- {
- GameHeroVo heroVo = UserProxy.Instance.player.collectHero.GetHeroGameInfoByHeroUId(curVo.heros[i]);
- if (heroVo != null)
- {
- heroVo.isLocked = false;
- mHeroVos.Add(heroVo);
- }
- }
- // 创建角色
- if (!isGuide)
- {
- StartCoroutine("CreatePlayers", 0);
- StartCoroutine("CreatePlayers", 1);
- StartCoroutine("CreatePlayers", 2);
- }
- // 挂载战报系统
- this.gameObject.AddComponent<WarReport.WarReportShowAdapter>();
- }
- /// <summary>
- /// 初始化挑战英雄
- /// </summary>
- public void InitChallengeHeros()
- {
- mCreateYanLings.Clear();
- mHeroVos.Clear();
- //mMirrorHeroVos.Clear();
- //mMirrorPlayerRoles.Clear();
- VSHeroInfo _heroInfo = LevelManager.Instance().mParameter as VSHeroInfo;
- if (_heroInfo == null)
- {
- Debug.LogError("挑战镜像数据异常!!!");
- return;
- }
- mHeroVos.AddRange(_heroInfo.selfHeros);
- //mMirrorHeroVos.AddRange(_heroInfo.otherHeros);
- }
- /// <summary>
- /// 设置玩家角色
- /// </summary>
- /// <param name="index">角色索引</param>
- public IEnumerator CreatePlayers(int index)
- {
- if (index >= 0 && index < mHeroVos.Count)
- {
- // 存在
- if (mPlayerRoles.ContainsKey(index))
- {
- yield break; ;
- }
- // 创建 默认地图出生点
- Vector3 createPos = Vector3.zero;
- Quaternion createRotation = Quaternion.identity;
- // 返回副本记录点
- if (GameDateManager.Instance.IsBackDoor)
- {
- createPos = GameDateManager.Instance.CreatePosition;
- }
- // 返回据点传送阵 MapTcpProxy.Instance.Peer.MapData.BirthPoint 为非死亡时 zheng chan存储
- else if (GameDateManager.Instance.CreateMapSwitchPoint == 0 || GameDateManager.Instance.isBackDie)
- {
- Transform liveTran = GameObject.Find("AIManager/Area1/0").transform;
- createPos = liveTran.position;
- createRotation = liveTran.rotation;
- // 如果使用回城券 创建 返回传送门
- if (GameDateManager.Instance.isBackTicket)
- {
- GameDateManager.Instance.isBackTicket = false;
- ResourceHelper.Instance.LoadAssetBundle("Scene_BackDoor", ab =>
- {
- if (ab != null)
- {
- GameObject bdObj = (GameObject)Instantiate(ab.LoadAsset("Scene_BackDoor"));
- bdObj.SetActive(true);
- //bdObj.transform.SetParent(this.transform);
- bdObj.transform.localPosition = createPos + Vector3.forward * 2f;
- bdObj.transform.localRotation = createRotation;
- }
- });
- }
- }
- // 需要移动到地图切换器入口处
- else
- {
- SceneEventMapSwitchLogic swiObj = null;
- while (swiObj == null)
- {
- yield return 0;
- swiObj = SceneCmptManager.Instance.GetMapSwitchCmptByIndex(GameDateManager.Instance.CreateMapSwitchPoint);
-
- if (swiObj != null)
- {
- swiObj.SetTeleportClose();
- Transform liveTran = swiObj.transform.Find("createPoint");
- createPos = liveTran.position;
- createRotation = liveTran.rotation;
- break;
- }
- }
- }
- GameDateManager.Instance.isBackDie = false;
- Vector3 pos = createPos + new Vector3(UnityEngine.Random.Range(-1.5f, 1.5f), 0, UnityEngine.Random.Range(-1.5f, 1.5f));
- CreateHero(mHeroVos[index], pos, createPos, 5, "PlayerBT", (role) =>
- {
- //role.gameObject.SetActive(false);
- role.transform.rotation = createRotation;
- NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- CheckWarp(nav, createPos);
- role.IsTeamLeader = false;
- role.playerUID = UserProxy.Instance.player.uid;
- role.SetPropertyFinal(null, EBattleProperty.NPOWER, role.mData.MP_Final);
- // 创建英雄携带的言灵
- CreateHeroYanLing(role, mHeroVos[index]);
- mPlayerRoles[index] = role;
- // 默认先控制第一个
- if (index == 0)
- {
- ReplaceHero(index, false);
- }
- if (GameDateManager.Instance.IsBackDoor)
- {
- // 播放创建落地动画
- HeroPlayerController.Instance.m_Hero.PlayAnimation("return_entry_e");
- }
- // 返回据点传送阵
- else if (GameDateManager.Instance.CreateMapSwitchPoint == 0)
- {
- if (GameDateManager.Instance.isBackTicket)
- {
- HeroPlayerController.Instance.m_Hero.PlayAnimation("return_back_e");
- }
- }
- });
- }
- }
- public void CreatePlayers(int index, System.Action ac = null)
- {
- if (index >= 0 && index < mHeroVos.Count)
- {
- // 存在
- if (mPlayerRoles.ContainsKey(index))
- {
- if (ac != null)
- ac();
- return;
- }
- // 创建
- Transform liveTran = GameObject.Find("AIManager/Area1/0").transform;
- Vector3 pos = liveTran.position + new Vector3(UnityEngine.Random.Range(-1.5f, 1.5f), 0, UnityEngine.Random.Range(-1.5f, 1.5f));
- CreateHero(mHeroVos[index], pos, liveTran.position, 5, "PlayerBT", (role) =>
- {
- role.gameObject.SetActive(false);
- role.transform.rotation = liveTran.rotation;
- NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- CheckWarp(nav, livePos);
- role.IsTeamLeader = false;
- role.playerUID = UserProxy.Instance.player.uid;
- // 创建英雄携带的言灵
- CreateHeroYanLing(role, mHeroVos[index]);
- mPlayerRoles[index] = role;
- // 默认先控制第一个
- if (index == 0)
- {
- ReplaceHero(index, false);
- }
- if (ac != null)
- {
- ac();
- }
- });
- }
- else
- {
- if (ac != null)
- {
- ac();
- }
- }
- }
- public void CreateFriendPlayers(string uid, System.Action ac = null)
- {
- UserProxy.Instance.UserOtherPlayerInfo(uid, (player) =>
- {
- // 创建
- Transform liveTran = GameObject.Find("AIManager/Area1/0").transform;
- Vector3 pos = liveTran.position + new Vector3(UnityEngine.Random.Range(-1.5f, 1.5f), 0, UnityEngine.Random.Range(-1.5f, 1.5f));
- GameHeroVo hVo = player.collectHero.GetHeroGameInfoByHeroUId(player.heroTeamConfig.CurTeam.heros[0]);
- CreateHero(hVo, pos, liveTran.position, 5, "PlayerBT", (role) =>
- {
- role.gameObject.SetActive(true);
- role.transform.rotation = liveTran.rotation;
- NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- CheckWarp(nav, livePos);
- role.IsTeamLeader = false;
- role.playerUID = uid;
- // 创建英雄携带的言灵
- CreateHeroYanLing(role, hVo);
- mFriendRoles.Add(mFriendRoles.Count, role);
- if (role.transform.Find("CMStateDrivenCamera") != null)
- {
- GameObject cmObj = role.transform.Find("CMStateDrivenCamera").gameObject;
- GameObject.Destroy(cmObj);
- }
- });
- });
- // GameHeroVo heroVo = mMirrorHeroVos[index];
- // Transform liveTran = GameObject.Find("AIManager/Area1/" + (index + 1)).transform;
- // Vector3 pos = liveTran.position;
- // CreateHero(heroVo, pos, liveTran.position, 5, "PlayerMirrorBT", (role) =>
- // {
- // role.transform.rotation = liveTran.rotation;
- // NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- // nav.Warp(liveTran.position);
- // role.IsTeamLeader = false;
- // role.gameObject.name = "Mirror_" + heroVo.mo.prefabRes;
- // // 创建英雄携带的言灵
- // CreateHeroYanLing(role, heroVo);
- // // 创建下一个言灵
- // CreateMirrorPlayer(index + 1);
- // }, true);
- }
- private Vector3 livePos = Vector3.zero;
- private System.Action<bool> sucAC = null;
- /// <summary>
- /// 下一位队长
- /// </summary>
- /// <returns>是否切换成功</returns>
- public void NextTeamLeader(Vector3 pos, System.Action<bool> ac)
- {
- if (IsInvoking("LateNextTeamLeader") == false)
- {
- livePos = pos;
- sucAC = ac;
- Invoke("LateNextTeamLeader", 2.0f);
- }
- }
- /// <summary>
- /// 延迟切换队长
- /// </summary>
- private void LateNextTeamLeader()
- {
- // 优先设置上次切换的角色
- if (mPlayerRoles.ContainsKey(lastPlayerIndex))
- {
- if (mPlayerRoles[lastPlayerIndex] != null)
- {
- mPlayerRoles[lastPlayerIndex].transform.position = livePos;
- //ADON新增控制玩家模块
- HeroPlayerController.Instance.SetPlayer(mPlayerRoles[lastPlayerIndex] as BaseHero, true);
- // 初始化三人头像
- if (BattleCanvas.Instance != null)
- {
- BattleCanvas.Instance.UpdateHeroIcon(lastPlayerIndex, -1, mHeroVos);
- }
- // 成功回调
- if (sucAC != null)
- {
- sucAC.Invoke(true);
- }
- return;
- }
- }
- // 查找还活着的角色,并设置控制权
- foreach (var item in mPlayerRoles)
- {
- if (item.Value != null)
- {
- curPlayerIndex = item.Key;
- lastPlayerIndex = item.Key;
- item.Value.transform.position = livePos;
- //ADON新增控制玩家模块
- HeroPlayerController.Instance.SetPlayer(item.Value as BaseHero, true);
- // 初始化三人头像
- if (BattleCanvas.Instance != null)
- {
- BattleCanvas.Instance.UpdateHeroIcon(curPlayerIndex, -1, mHeroVos);
- }
- // 成功回调
- if (sucAC != null)
- {
- sucAC.Invoke(true);
- }
- return;
- }
- }
- // 失败回调
- if (sucAC != null)
- {
- sucAC.Invoke(false);
- }
- }
- /// <summary>
- /// 替换英雄
- /// </summary>
- /// <param name="index"></param>
- public void ReplaceHero(int index, bool isSwitchRole = true)
- {
- // 检测是否有指定玩家
- GameDateManager.Instance.CheckHaveAppointPlayers(mHeroVos);
- Vector3 pos = Vector3.zero;
- // 切换钱角色不为空,则隐藏
- if (mPlayerRoles.ContainsKey(curPlayerIndex))
- {
- mPlayerRoles[curPlayerIndex].gameObject.SetActive(false);
- pos = mPlayerRoles[curPlayerIndex].transform.position;
- }
- lastPlayerIndex = curPlayerIndex;
- // 激活新的
- if (mPlayerRoles.ContainsKey(index))
- {
- curPlayerIndex = index;
- if (pos != Vector3.zero)
- {
- mPlayerRoles[index].transform.position = pos;
- }
- //ADON新增控制玩家模块
- HeroPlayerController.Instance.SetPlayer(mPlayerRoles[index] as BaseHero, true);
- }
- else
- {
- // 激活新的失败, 找一个存活的激活
- foreach (var item in mPlayerRoles)
- {
- if (item.Value != null)
- {
- curPlayerIndex = item.Key;
- if (pos != Vector3.zero)
- {
- mPlayerRoles[index].transform.position = pos;
- }
- //ADON新增控制玩家模块
- HeroPlayerController.Instance.SetPlayer(item.Value as BaseHero, true);
- break;
- }
- }
- }
- // 初始化三人头像
- if (BattleCanvas.Instance != null)
- {
- BattleCanvas.Instance.UpdateHeroIcon(curPlayerIndex, lastPlayerIndex, mHeroVos);
- }
- }
- ///// <summary>
- ///// 创建镜像玩家
- ///// </summary>
- ///// <param name="heroVo"></param>
- ///// <param name="behaviorTreeName"></param>
- //public void CreateMirrorPlayer(int index)
- //{
- // if (index >= 0 && index < mMirrorHeroVos.Count)
- // {
- // GameHeroVo heroVo = mMirrorHeroVos[index];
- // Transform liveTran = GameObject.Find("AIManager/Area1/" + (index + 1)).transform;
- // Vector3 pos = liveTran.position;
- // CreateHero(heroVo, pos, liveTran.position, 5, "PlayerMirrorBT", (role) =>
- // {
- // role.transform.rotation = liveTran.rotation;
- // NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- // nav.Warp(liveTran.position);
- // role.IsTeamLeader = false;
- // role.gameObject.name = "Mirror_" + heroVo.mo.prefabRes;
- // // 创建英雄携带的言灵
- // CreateHeroYanLing(role, heroVo);
- // // 创建下一个言灵
- // CreateMirrorPlayer(index + 1);
- // }, true);
- // }
- // else
- // {
- // Invoke("LateRunmMirrorBTS", 3);
- // }
- //}
- /// <summary>
- /// 延迟运行
- /// </summary>
- private void LateRunmMirrorBTS()
- {
- for (int i = 0; i < mMirrorBTS.Count; i++)
- {
- mMirrorBTS[i].EnableBehavior();
- }
- }
- /// <summary>
- /// 创建英雄携带的言灵
- /// </summary>
- /// <param name="role"></param>
- /// <param name="heroVO"></param>
- public void CreateHeroYanLing(Role role, GameHeroVo heroVO)
- {
- //一个英雄 有3个言灵槽: left:1、middle:2、right:3
- for (int i = 1; i <= heroVO.yanling.Count; i++)
- {
- role.RefreshYanLing(i, heroVO.yanling[i]);
- if (heroVO.yanling[i].Mo() != null && heroVO.yanling[i].Mo().GetYanlingExt() != null)
- {
- string ylRes = heroVO.yanling[i].Mo().GetYanlingExt().res;
- mYanLingRess.Add(ylRes);
- }
- }
- }
- /// <summary>
- /// 言灵攻击
- /// </summary>
- /// <param name="yanLingUID"></param>
- /// <param name="target"></param>
- /// <param name="ac"></param>
- /// <param name="goTime"></param>
- /// <param name="stayTime"></param>
- /// <param name="backTime"></param>
- public void YanLanAttack(int yanLingUID, Role target, string skillAni, System.Action ac, float goTime = 0.5f, float stayTime = 0.25f, float backTime = 0.5f)
- {
- if (mCreateYanLings.ContainsKey(yanLingUID))
- {
- YanLingBattleInfo info = mCreateYanLings[yanLingUID];
- // 去攻击
- info.selfTransform.parent = null;
- info.selfTransform.DOScale(Vector3.one * 0.25f, goTime);
- Vector3 dir = target.transform.position - info.selfTransform.position;
- dir.Normalize();
- Tweener toTweener = info.selfTransform.DOMove(target.transform.position - dir, goTime);
- toTweener.OnComplete(() =>
- {
- // 往回返
- info.selfTransform.parent = info.parentTransform;
- info.selfTransform.DOScale(Vector3.one * 0.05f, backTime);
- Tweener backTweener = info.selfTransform.DOLocalMove(Vector3.zero, backTime);
- backTweener.SetDelay(stayTime);
- // 到达目的地的攻击回调
- if (ac != null)
- {
- ac.Invoke();
- }
- // 播放动画
- info.dragonComponent.animation.GotoAndPlayByFrame(skillAni);
- });
- }
- }
- /// <summary>
- /// 创建英雄
- /// </summary>
- /// <param name="date">怪物数据</param>
- /// <param name="_tran">Transform</param>
- public void CreateHero(GameHeroVo date, Vector3 pos, Vector3 _livePos, float radius, string btResName, Action<Role> ac, bool isMirror = false)
- {
- if (string.IsNullOrEmpty(date.mo.prefabRes))
- {
- return;
- }
- string resName = "Role_" + date.mo.prefabRes;
- if (mRoleRes.ContainsKey(resName))
- {
- mRoleRes[resName]++;
- }
- else
- {
- mRoleRes.Add(resName, 1);
- }
- ResourceHelper.Instance.LoadAssetBundle("Role_" + date.mo.prefabRes, (AssetBundle bundle) =>
- {
- if (bundle != null)
- {
- GameObject roleObj = (GameObject)Instantiate(bundle.LoadAsset("Role_" + date.mo.prefabRes), transform, false);
- roleObj.AddComponent<FixShader>();
- roleObj.transform.position = pos;
- BaseHero role = null;
- if (date.mo.prefabRes == "202011")
- {
- role = roleObj.AddComponent<Hero002>();
- }
- else if (date.mo.prefabRes == "101005")
- {
- role = roleObj.AddComponent<Hero001>();
- }
- else if (date.mo.prefabRes == "101013")
- {
- role = roleObj.AddComponent<Hero003>();
- }
- else
- {
- role = roleObj.AddComponent<Hero001>();
- }
- //BaseHero role = roleObj.AddComponent<BaseHero>();
- role.mLivePos = _livePos;
- role.IsHero = true;
- role.mRadius = radius;
- role.roleType = RoleType.Hero;
- NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- CheckWarp(nav, _livePos);
- if (isMirror)
- {
- role.gameObject.layer = LayerMask.NameToLayer("Enemy");
- role.Init(new YLBattleUnit(date.mo, date), E_Camp.Red, isMirror);
- //mMirrorPlayerRoles.Add(role);
- }
- else
- {
- role.gameObject.layer = LayerMask.NameToLayer("Player");
- role.Init(new YLBattleUnit(date.mo, date), E_Camp.Blue, isMirror);
- }
- // 加载行为树资源
- ResourceHelper.Instance.LoadAssetBundle(btResName, (btAB) =>
- {
- if (btAB != null)
- {
- ExternalBehaviorTree ebt = btAB.LoadAsset<ExternalBehaviorTree>(btResName);
- if (ebt != null)
- {
- BehaviorTree bt = role.mBehaviorTree;
- bt.RestartWhenComplete = true;
- bt.StartWhenEnabled = false;
- bt.ExternalBehavior = ebt;
- bt.DisableBehavior();
- //// 设置属性
- //bt.SetVariableValue("moveSpeed", role.mData.MSP_Final);
- //bt.SetVariableValue("viewDistance", role.mData.ORG_Final);
- //bt.SetVariableValue("attackDistance", role.mData.ARG_Final);
- if (isMirror)
- {
- mMirrorBTS.Add(bt);
- }
- if (ac != null)
- {
- ac(role);
- }
- }
- else
- {
- Debug.LogWarning("解析行为树资源失败!" + btResName);
- }
- }
- else
- {
- Debug.LogWarning("加载行为树资源失败!" + btResName);
- }
- });
- //// 加入小地图
- //BattleCanvas.Instance.mapCmpt.AddTarget(role.gameObject, YL_MiniMap.MiniType.Player);
- }
- });
- }
- /// <summary>
- /// 原地复活
- /// </summary>
- public void RebirthHero()
- {
- RoleManager.Instance.CreatePlayers(0, () =>
- {
- Role role = RoleManager.Instance.GetPlayer(true);
- NavMeshAgent nav = role.GetComponent<NavMeshAgent>();
- nav.enabled = false;
- role.transform.position = diePos;
- nav.enabled = true;
- BattleCanvas.Instance.mapCmpt.AddTarget(role.gameObject, YL_MiniMap.MiniType.Player);
- });
- }
- public void RebirthGoCreatePoint()
- {
- RoleManager.Instance.CreatePlayers(0, () =>
- {
- Role role = RoleManager.Instance.GetPlayer(true);
- NavMeshAgent nav = role.GetComponent<NavMeshAgent>();
- nav.enabled = false;
- role.transform.position = AIManager.Instance.GetPlayerCreatePoint().position;
- nav.enabled = true;
- BattleCanvas.Instance.mapCmpt.AddTarget(role.gameObject, YL_MiniMap.MiniType.Player);
- });
- }
- /// <summary>
- /// 创建怪物
- /// </summary>
- /// <param name="area">所属区域</param>
- /// <param name="date">怪物数据</param>
- /// <param name="_tran">Transform</param>
- public void CreateMonster(int area, sm_hero date, List<int> dropId, Vector3 pos, Vector3 _livePos, float radius, RoleType roleType, Action<Role> ac = null)
- {
- if (string.IsNullOrEmpty(date.prefabRes))
- {
- return;
- }
- string resName = "Role_" + date.prefabRes;
- if (mRoleRes.ContainsKey(resName))
- {
- mRoleRes[resName]++;
- }
- else
- {
- mRoleRes.Add(resName, 1);
- }
- ResourceHelper.Instance.LoadAssetBundle("Role_" + date.prefabRes, (AssetBundle bundle) =>
- {
- if (bundle != null)
- {
- mCurArea = area;
- GameObject roleObj = (GameObject)Instantiate(bundle.LoadAsset("Role_" + date.prefabRes), transform, false);
- roleObj.AddComponent<FixShader>();
- roleObj.transform.position = pos;
- Role role = AddMonsterScript(date, roleObj);//创建添加怪脚本
- role.Init(new YLBattleUnit(date), E_Camp.Red);
- role.mLiveArea = area;
- role.mLivePos = _livePos;
- role.dropId = dropId;
- role.IsHero = false;
- NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- CheckWarp(nav, _livePos);
- role.mRadius = radius;
- role.roleType = roleType;
- if (roleType == RoleType.Boss)
- {
- this._bossLive = true;
- }
- if (mCreateMonsterRoles.ContainsKey(area))
- {
- mCreateMonsterRoles[area].Add(role);
- }
- else
- {
- List<Role> roles = new List<Role>();
- roles.Add(role);
- mCreateMonsterRoles.Add(area, roles);
- }
- // 加载行为树资源
- string behaviorTreeName = role.mData.mMonsterVo.ai_btree;
- ResourceHelper.Instance.LoadAssetBundle(behaviorTreeName, (btAB) =>
- {
- if (btAB != null)
- {
- ExternalBehaviorTree ebt = btAB.LoadAsset<ExternalBehaviorTree>(behaviorTreeName);
- if (ebt != null)
- {
- BehaviorTree bt = role.mBehaviorTree;
- bt.RestartWhenComplete = true;
- bt.StartWhenEnabled = true;
- bt.ExternalBehavior = ebt;
- if (ac != null)
- {
- ac(role);
- }
- }
- else
- {
- Debug.LogWarning("解析行为树资源失败!" + behaviorTreeName);
- }
- }
- else
- {
- Debug.LogWarning("加载行为树资源失败!" + behaviorTreeName);
- }
- });
- // 网格优化分配
- if (GameObject.Find("GridMap") != null)
- {
- MyGridMap gridMap = GameObject.Find("GridMap").GetComponent<MyGridMap>();
- gridMap.AddOneObjToGrid(roleObj);
- }
- }
- });
- }
- /// <summary>
- /// 创建怪物
- /// </summary>
- /// <param name="area">所属区域</param>
- /// <param name="date">怪物数据</param>
- /// <param name="_tran">Transform</param>
- public void CreateUnitBySpawner(int area, sm_hero date, List<int> dropId, Vector3 pos, Quaternion qua, float radius, RoleType roleType, Action<Role> ac = null)
- {
- if (string.IsNullOrEmpty(date.prefabRes))
- {
- return;
- }
- string resName = "Role_" + date.prefabRes;
- if (mRoleRes.ContainsKey(resName))
- {
- mRoleRes[resName]++;
- }
- else
- {
- mRoleRes.Add(resName, 1);
- }
- ResourceHelper.Instance.LoadAssetBundle("Role_" + date.prefabRes, (AssetBundle bundle) =>
- {
- if (bundle != null)
- {
- mCurArea = area;
- GameObject roleObj = (GameObject)Instantiate(bundle.LoadAsset("Role_" + date.prefabRes), transform, false);
- roleObj.AddComponent<FixShader>();
- float offsetX = UnityEngine.Random.Range(0, radius);
- float offsetZ = UnityEngine.Random.Range(0, radius);
- roleObj.transform.position = pos + new Vector3(offsetX, 0,offsetZ);
- roleObj.transform.rotation = qua;
- // 精英怪比普通怪大
- if (roleType == RoleType.Elite)
- {
- roleObj.transform.localScale = Vector3.one * 1.25f;
- }
- // BOSS
- else if (roleType == RoleType.Boss)
- {
- roleObj.transform.localScale = Vector3.one * 1.5f;
- }
- // 普通怪
- else
- {
- roleObj.transform.localScale = Vector3.one;
- }
- roleObj.SetActive(true);
- Role role = AddMonsterScript(date, roleObj);//创建添加怪脚本
- role.Init(new YLBattleUnit(date), E_Camp.Red);
- role.mLiveArea = area;
- role.mLivePos = roleObj.transform.position;
- role.IsHero = false;
- role.dropId = dropId;
- NavMeshAgent nav = role.gameObject.GetComponent<NavMeshAgent>();
- CheckWarp(nav, roleObj.transform.position);
- role.mRadius = radius;
- role.roleType = roleType;
- if (roleType == RoleType.Boss)
- {
- this._bossLive = true;
- }
- if (mCreateMonsterRoles.ContainsKey(area))
- {
- mCreateMonsterRoles[area].Add(role);
- }
- else
- {
- List<Role> roles = new List<Role>();
- roles.Add(role);
- mCreateMonsterRoles.Add(area, roles);
- }
- // 加载行为树资源
- string behaviorTreeName = role.mData.mMonsterVo.ai_btree;
- sm_gate gateMo = sm_gate.GetMoById(UserProxy.Instance.player.newMap.curMapId);
- if ((BattleDefine.EBattleSceneType)int.Parse(gateMo.battleType) == BattleDefine.EBattleSceneType.EBattleType_Defense)
- {
- behaviorTreeName = "BT_Defense_301001";
- }
-
- ResourceHelper.Instance.LoadAssetBundle(behaviorTreeName, (btAB) =>
- {
- if (btAB != null)
- {
- ExternalBehaviorTree ebt = btAB.LoadAsset<ExternalBehaviorTree>(behaviorTreeName);
- if (ebt != null)
- {
- BehaviorTree bt = role.mBehaviorTree;
- bt.RestartWhenComplete = true;
- bt.StartWhenEnabled = true;
- bt.ExternalBehavior = ebt;
- //// 设置属性
- //bt.SetVariableValue("moveSpeed", role.mData.MSP_Final);
- //bt.SetVariableValue("viewDistance", role.mData.ORG_Final);
- //bt.SetVariableValue("attackDistance", role.mData.ARG_Final);
- if (ac != null)
- {
- ac(role);
- }
- }
- else
- {
- Debug.LogWarning("解析行为树资源失败!" + behaviorTreeName);
- }
- }
- else
- {
- Debug.LogWarning("加载行为树资源失败!" + behaviorTreeName);
- }
- });
- //// 加入小地图
- if (BattleCanvas.Instance != null && BattleCanvas.Instance.mapCmpt)
- {
- BattleCanvas.Instance.mapCmpt.AddTarget(role.gameObject, YL_MiniMap.MiniType.Monster);
- }
- // 网格优化分配
- if (GameObject.Find("GridMap") != null)
- {
- MyGridMap gridMap = GameObject.Find("GridMap").GetComponent<MyGridMap>();
- gridMap.AddOneObjToGrid(roleObj);
- }
- }
- });
- }
- /// <summary>
- /// 添加怪物脚本
- /// </summary>
- /// <param name="date"></param>
- /// <param name="role"></param>
- /// <param name="roleObj"></param>
- Role AddMonsterScript(sm_hero date, GameObject roleObj)
- {
- Role role = new Role();
- if (date.prefabRes == "301001")
- {
- role = roleObj.AddComponent<Mob01_WarriorAdon>();
- }
- else if (date.prefabRes == "601001")
- {
- role = roleObj.AddComponent<Mob02_ShooterAdon>();
- }
- else if (date.prefabRes == "401001")
- {
- role = roleObj.AddComponent<Boss01_WarriorAdon>();
- }
- else if (date.prefabRes == "701001")
- {
- role = roleObj.AddComponent<Mob03_WarriorAdon>();
- }
- else if (date.prefabRes == "1001001")
- {
- role = roleObj.AddComponent<Boss02_WarriorAdon>();
- role.GetComponent<Boss02_WarriorAdon>().m_CurForm = 1;
- }
- else if (date.prefabRes == "1001002")
- {
- role = roleObj.AddComponent<Boss02_WarriorAdon>();
- role.GetComponent<Boss02_WarriorAdon>().m_CurForm = 2;
- }
- else if (date.prefabRes == "1001003")
- {
- role = roleObj.AddComponent<Boss02_WarriorAdon>();
- role.GetComponent<Boss02_WarriorAdon>().m_CurForm = 3;
- }
- else if (date.prefabRes == "1001004")
- {
- role = roleObj.AddComponent<Boss02_WarriorAdon>();
- role.GetComponent<Boss02_WarriorAdon>().m_CurForm = 4;
- }
- else if (date.prefabRes == "2001001")
- {
- role = roleObj.AddComponent<Warrior_2001001_Boss>();
- }
- else if (date.prefabRes == "2101001")
- {
- role = roleObj.AddComponent<Shooter_2101001>();
- }
- else if (date.prefabRes == "2201001")
- {
- role = roleObj.AddComponent<Shooter_2201001>();
- }
- else if (date.prefabRes == "2301001")
- {
- role = roleObj.AddComponent<Shooter_2301001>();
- }
- else if (date.prefabRes == "2401001")
- {
- role = roleObj.AddComponent<Shooter_2401001>();
- }
- else if (date.prefabRes == "2501001")
- {
- role = roleObj.AddComponent<Shooter_2501001>();
- }
- else if (date.prefabRes == "2601001")
- {
- role = roleObj.AddComponent<Shooter_2601001>();
- }
- else if (date.prefabRes == "2701001")
- {
- role = roleObj.AddComponent<Shooter_2701001>();
- }
- else if (date.prefabRes == "701101" || date.prefabRes == "701201" || date.prefabRes == "701301" || date.prefabRes == "701401")//俯冲战机(元素)
- {
- role = roleObj.AddComponent<Mob03_WarriorAdon_Elements>();
- }
- else if (date.prefabRes == "1101101" || date.prefabRes == "1101201" || date.prefabRes == "1101301" || date.prefabRes == "1101401")//大眼怪(元素)
- {
- role = roleObj.AddComponent<Mob04_WarriorAdon>();
- }
- else if (date.prefabRes == "1201001" || date.prefabRes == "1201101" || date.prefabRes == "1201201" || date.prefabRes == "1201301" || date.prefabRes == "1201401")//野蛮先行官
- {
- role = roleObj.AddComponent<Mob05_WarriorAdon>();
- }
- else if (date.prefabRes == "1301001" || date.prefabRes == "1301101" || date.prefabRes == "1301201" || date.prefabRes == "1301301" || date.prefabRes == "1301401")//自爆机甲
- {
- role = roleObj.AddComponent<Mob06_WarriorAdon>();
- }
- else
- {
- role = roleObj.AddComponent<BaseMonsterAdon>();
- }
- return role;
- }
- /// <summary>
- /// 移除一个角色
- /// </summary>
- /// <param name="role">角色</param>
- public void DeleteRole(Role role, float delayTime = 0)
- {
- int point = role.mLiveArea;
- diePos = role.transform.position;
- if (GameBattleManager.Instance().battleType == BattleDefine.EBattleSceneType.EBattleType_Arena && role.isMirror)
- {
- }
- else if (role.mData.mIsHero)
- {
- // 删除VO数据
- for (int i = 0; i < mHeroVos.Count; i++)
- {
- if (mHeroVos[i] != null && mHeroVos[i].typeId == role.mData.mHeroVo.typeId)
- {
- mHeroVos[i].isLocked = true;
- }
- }
- // 删除实例
- foreach (var item in mPlayerRoles)
- {
- if (item.Value == role)
- {
- mPlayerRoles[item.Key] = null;
- mPlayerRoles.Remove(item.Key);
- break;
- }
- }
- Destroy(role.gameObject, delayTime);
- }
- else
- {
- // 非无尽塔 守护模式下 进行掉落
- sm_gate gateMo = sm_gate.GetMoById(UserProxy.Instance.player.newMap.curMapId);
- if ((BattleDefine.EBattleSceneType)int.Parse(gateMo.battleType) != BattleDefine.EBattleSceneType.EBattleType_Endless &&
- (BattleDefine.EBattleSceneType) int.Parse(gateMo.battleType) != BattleDefine.EBattleSceneType.EBattleType_Defense)
- {
- // 上报
- TaskProxy.Instance.ReportKillMonsterEvent(role.mData.TID, 1, (b, taskCardVo, newCardVo) =>
- {
- if (b == false || taskCardVo == null)
- {
- return;
- }
- });
- string heroId = UserProxy.Instance.player.CurrentBattleteam.CurTeamLeaderUID;
- ItemProxy.Instance.killMosterAddData(heroId, role.mData.TID, (expnum) =>
- {
- EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
- eventCmpt.FireNow(this, new GetExpEvent(expnum));
- });
- ResourceHelper.Instance.LoadAssetBundle("shiqu_nengliang", (ab) =>
- {
- if (ab != null)
- {
- GameObject eff = (GameObject)Instantiate(ab.LoadAsset("shiqu_nengliang"));
- eff.transform.localPosition = diePos;
- CmptAutoDestory des = eff.AddComponent<CmptAutoDestory>();
- des.LiveTime = 2.0f;
- eff.transform.DOMove(diePos + Vector3.up * 3.5f, 0.5f).OnComplete(() =>
- {
- DropItemFollow follow = eff.AddComponent<DropItemFollow>();
- follow.target = HeroPlayerController.Instance.m_Hero.gameObject;
- });
- }
- });
- // 如果dropId 有值 则是被孵化器修改 则按照孵化器的掉落ID掉落
- if (role.dropId == null)
- {
- if (DropManager.Instance != null)
- {
- DropManager.Instance.DropItems((int)(role.mData.mMonsterVo.dropId), diePos + new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f)));
- }
- }
- else
- {
- foreach (var id in role.dropId)
- {
- if (DropManager.Instance != null)
- {
- DropManager.Instance.DropItems(id, diePos + new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), 0, UnityEngine.Random.Range(-0.5f, 0.5f)));
- }
- }
- }
- }
- EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
- if ((BattleDefine.EBattleSceneType) int.Parse(gateMo.battleType) == BattleDefine.EBattleSceneType.EBattleType_Defense)
- {
- eventCmpt.FireNow(this, new DefenseEventEscapeNum());
- }
- if (role.roleType == RoleType.Boss)
- {
- this._bossLive = false;
- }
- // ----------- 孵化器 同步 列表刷新 S -----------------------
-
- eventCmpt.FireNow(this, new BattleEventRemoveUnit(role));
- // ----------- 孵化器 同步 列表刷新 E -----------------------
- DestoryRole(role, delayTime);
- // BOSS被击杀
- if (role.roleType == RoleType.Boss)
- {
- if (gateMo.battleType == BattleDefine.EBattleSceneType.EBattleType_Boss.ToString() ||
- gateMo.battleType == BattleDefine.EBattleSceneType.EBattleType_Duplicate.ToString() ||
- // 0城镇 1据点 2非据点 3Boss点 4 其他
- gateMo.mapType == 4)
- {
- SpawnerSystem.Instance.CloseSystem();
- // 其他小怪处于死亡状态
- AllMonsterDeath(point);
- // 点击传送门才结束
- ResourceHelper.Instance.LoadAssetBundle("sucai_chuansongmen", (ab) =>
- {
- if (ab != null)
- {
- GameObject obj = (GameObject)Instantiate(ab.LoadAsset("sucai_chuansongmen"), diePos + Vector3.up, Quaternion.identity);
- chuanSongMen = obj.GetComponent<ChuanSongMen>();
- chuanSongMen.clickAC = ChuanSongMenClick;
- chuanSongMen.enterAC = ChuanSongMenEnter;
- }
- });
- }
- EventComponent ec = GameEntry.GetComponent<EventComponent>();
- ec.FireNow(this, new NoviceEventBossDie());
- }
- else
- {
- if ((BattleDefine.EBattleSceneType)int.Parse(gateMo.battleType) == BattleDefine.EBattleSceneType.EBattleType_Endless ||
- (BattleDefine.EBattleSceneType)int.Parse(gateMo.battleType) == BattleDefine.EBattleSceneType.EBattleType_Defense)
- {
- if (SpawnerSystem.Instance.IsCloseAllSpawner() &&
- SpawnerSystem.Instance.IsLastSpawner() &&
- mCreateMonsterRoles.Count <= 0)
- {
- EventComponent ec = GameEntry.GetComponent<EventComponent>();
- ec.FireNow(this, new BattleEventEndlessUpdateSpawner());
- }
- }
- else if (SpawnerSystem.Instance.GetBattleType() != BattleDefine.EBattleSceneType.EBattleType_Boss)
- {
- if (SpawnerSystem.Instance.IsCloseAllSpawner() &&
- SpawnerSystem.Instance.IsLastSpawner() &&
- mCreateMonsterRoles.Count <= 1)
- {
- // 点击传送门才结束
- ResourceHelper.Instance.LoadAssetBundle("sucai_chuansongmen", (ab) =>
- {
- if (ab != null)
- {
- GameObject obj = (GameObject)Instantiate(ab.LoadAsset("sucai_chuansongmen"), diePos + Vector3.up, Quaternion.identity);
- chuanSongMen = obj.GetComponent<ChuanSongMen>();
- chuanSongMen.clickAC = ChuanSongMenClick;
- chuanSongMen.enterAC = ChuanSongMenEnter;
- }
- });
- }
- }
- }
- //if (mCreateMonsterRoles[point].Count <= 0)
- //{
- // AIManager.Instance.CreateNextPointMonster(Vector3.zero);
- //}
- }
- }
- public void DestoryRole(Role role, float delayTime = 0)
- {
- int point = role.mLiveArea;
- Vector3 diePos = role.transform.position;
- if (mCreateMonsterRoles.ContainsKey(point))
- {
- mCreateMonsterRoles[point].Remove(role);
- Destroy(role.gameObject, delayTime);
- if(mCreateMonsterRoles[point].Count == 0)
- {
- mCreateMonsterRoles.Remove(point);
- }
- }
- }
- private void ChuanSongMenClick(int type)
- {
- UI_CueDialog.Instance().Open("是否离开战场?", "", E_DialogType.TwoBntton, () =>
- {
- // 游戏胜利 向服务器发送数据 接受奖励信息
- this.GameWin();
- });
- }
- private void ChuanSongMenEnter(int type, GameObject obj)
- {
- if (obj.layer == LayerMask.NameToLayer("Player"))
- {
- UI_CueDialog.Instance().Open("是否离开战场?", "", E_DialogType.TwoBntton, () =>
- {
- // 游戏胜利 向服务器发送数据 接受奖励信息
- this.GameWin();
- });
- }
- }
- /// <summary>
- /// 当前刷怪点的所有怪物死亡
- /// </summary>
- /// <param name="point"></param>
- private void AllMonsterDeath(int point)
- {
- if (mCreateMonsterRoles.ContainsKey(point))
- {
- for (int i = 0; i < mCreateMonsterRoles[point].Count; i++)
- {
- //*//mCreateMonsterRoles[point][i].roleState = new RoleState_Death(mCreateMonsterRoles[point][i], false);
- }
- }
- }
- public void GameWin()
- {
- ProcedureComponent procedure = GameObject.Find("YLGameFramework").transform.Find("Procedure").gameObject.GetComponent<ProcedureComponent>();
- if (procedure.CurrentProcedure != null && (procedure.CurrentProcedure.GetType().ToString() == "GameFrameworkYLSJ.ProcedureNoviceGuideEnd" ||
- procedure.CurrentProcedure.GetType().ToString() == "GameFrameworkYLSJ.ProcedureNoviceGuideArousal" ||
- procedure.CurrentProcedure.GetType().ToString() == "GameFrameworkYLSJ.ProcedureNoviceGuideBoss"))
- {
- return;
- }
- if (chuanSongMen != null)
- {
- chuanSongMen.gameObject.SetActive(false);
- }
- // 结束
- EventComponent e = GameEntry.GetComponent<EventComponent>();
- e.FireNow(this, new BattleEventAppraise());
- }
- public void Update()
- {
- //UpdateMonsterActiveStatus();
- OnUpdateRoles();
- }
- float updateTime = 0;
- /// <summary>
- /// 更新怪物的激活状态
- /// </summary>
- private void UpdateMonsterActiveStatus()
- {
- updateTime += Time.deltaTime;
- if (updateTime < 1.0f)
- {
- return;
- }
- else
- {
- updateTime = 0;
- }
- Role ctrlRole = GetPlayer();
- if (ctrlRole == null)
- {
- return;
- }
- foreach (var item in mCreateMonsterRoles)
- {
- foreach (var targetRole in item.Value)
- {
- if (targetRole != null)
- {
- float dis = Vector3.Distance(ctrlRole.transform.position, targetRole.transform.position);
- if (dis >= 20)
- {
- if (targetRole.mAnimator.isActiveAndEnabled)
- {
- targetRole.mAnimator.enabled = false;
- targetRole.mNavMeshAgent.isStopped = true;
- targetRole.mBehaviorTree.DisableBehavior(true);
- }
- }
- else
- {
- if (targetRole.mAnimator.isActiveAndEnabled == false)
- {
- targetRole.mAnimator.enabled = true;
- targetRole.mNavMeshAgent.isStopped = false;
- targetRole.mBehaviorTree.EnableBehavior();
- }
- }
- }
- }
- }
- }
- private void OnUpdateRoles()
- {
- Role cdRole = null;
- foreach (var item in mPlayerRoles)
- {
- if (item.Value != null && item.Value.gameObject.activeSelf)
- {
- cdRole = item.Value;
- break;
- }
- }
- if (cdRole == null)
- {
- return;
- }
- HeroGameVo_Yanling yanlingVOU = cdRole.mData.mHeroVo.yanling[1];
- HeroGameVo_Yanling yanlingVOC = cdRole.mData.mHeroVo.yanling[2];
- HeroGameVo_Yanling yanlingVOB = cdRole.mData.mHeroVo.yanling[3];
- if (yanlingVOU.typeId != 0 && yanlingVOU.cd_now > 0)
- {
- yanlingVOU.cd_now -= Time.deltaTime;
- }
- if (yanlingVOC.typeId != 0 && yanlingVOC.cd_now > 0)
- {
- yanlingVOC.cd_now -= Time.deltaTime;
- }
- if (yanlingVOB.typeId != 0 && yanlingVOB.cd_now > 0)
- {
- yanlingVOB.cd_now -= Time.deltaTime;
- }
- // 刷新能量SP
- _refreshNowTime += Time.deltaTime;
- if (_refreshNowTime > _refreshTime)
- {
- _refreshNowTime -= _refreshTime;
- }
- else
- {
- return;
- }
- if (yanlingVOU.typeId != 0)
- {
- yanlingVOU.sp_now = Math.Min(yanlingVOU.Mo().GetYanlingExt().sp_max, yanlingVOU.sp_now + yanlingVOU.Mo().GetYanlingExt().sp_cure);
- }
- if (yanlingVOC.typeId != 0)
- {
- yanlingVOC.sp_now = Math.Min(yanlingVOC.Mo().GetYanlingExt().sp_max, yanlingVOC.sp_now + yanlingVOC.Mo().GetYanlingExt().sp_cure);
- }
- if (yanlingVOB.typeId != 0)
- {
- yanlingVOB.sp_now = Math.Min(yanlingVOB.Mo().GetYanlingExt().sp_max, yanlingVOB.sp_now + yanlingVOB.Mo().GetYanlingExt().sp_cure);
- }
- }
- /// <summary>
- /// 挑战结果
- /// </summary>
- /// <param name="win"></param>
- public void ChallengeResult(bool win)
- {
- PanelHelper.Instance.ShowPanel("UI_ChallengeResultWindow", null, win);
- PanelHelper.Instance.ClosePanel("BattleCanvas");
- }
- /// <summary>
- /// 检测有效位置并设置
- /// </summary>
- /// <param name="nav"></param>
- /// <param name="pos"></param>
- private void CheckWarp(NavMeshAgent nav, Vector3 pos, float dis = 5)
- {
- NavMeshHit hit;
- bool has = NavMesh.SamplePosition(pos, out hit, dis, NavMesh.AllAreas);
- if (has)
- {
- nav.Warp(hit.position);
- }
- //else
- //{
- // nav.Warp(hit.position);
- //}
- }
- /// <summary>
- /// 清除角色资源
- /// </summary>
- public void ClearRoleRes()
- {
- // 卸载角色资源
- foreach (var item in mRoleRes)
- {
- ResourceHelper.Instance.UnloadAssetBundle(item.Key);
- }
- mRoleRes.Clear();
- // 卸载言灵资源
- for (int i = 0; i < mYanLingRess.Count; i++)
- {
- ResourceHelper.Instance.UnloadAssetBundle(mYanLingRess[i]);
- }
- mYanLingRess.Clear();
- // 删除角色GameObject
- foreach (var item in mPlayerRoles)
- {
- Destroy(item.Value);
- }
- mPlayerRoles.Clear();
- // 删除怪物GameObject
- foreach (var item in mCreateMonsterRoles)
- {
- for (int i = item.Value.Count - 1; i >= 0; i--)
- {
- Destroy(item.Value[i]);
- }
- }
- mCreateMonsterRoles.Clear();
- // 清空RoleManager残余(正常不需要,有几率有残余)
- for (int i = transform.childCount - 1; i >= 0; i--)
- {
- Destroy(transform.GetChild(i).gameObject);
- }
- lastPlayerIndex = -1;
- curPlayerIndex = 0;
- }
- }
- /// <summary>
- /// 阵营
- /// </summary>
- public enum E_Camp
- {
- /// <summary>
- /// 无
- /// </summary>
- None = 0,
- /// <summary>
- /// 红队(敌方)
- /// </summary>
- Red = 1,
- /// <summary>
- /// 蓝队(友方)
- /// </summary>
- Blue = 2,
- }
- /// <summary>
- /// 言灵的战斗信息
- /// </summary>
- public struct YanLingBattleInfo
- {
- public Transform parentTransform;
- public Transform selfTransform;
- public HeroGameVo_Yanling yanLingVO;
- public DragonBones.UnityArmatureComponent dragonComponent;
- public Role ownRole;
- }
|