1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735 |
- //#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";
- NavMeshAgent agent = role.GetComponent<NavMeshAgent>();
- agent.stoppingDistance = 0.1f;
- }
-
- 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;
- }
|