12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733 |
- //#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)));
- }
- }
- }
- }
-
- if (role.roleType == RoleType.Boss)
- {
- this._bossLive = false;
- }
- // ----------- 孵化器 同步 列表刷新 S -----------------------
- EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
- 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;
- }
|