public void Do(IBattle battle, IHeroFSM selfFSM, IHeroFSM targetFSM) { selfFSM.HeroGraphic.Trans.DOKill(); var pos = battle.World.GetPlayerPos(selfFSM.ID); selfFSM.HeroGraphic.Trans.DOMove(pos, (float)this.skillEvent.DoubleParams0 / 30f); }
/// <summary> /// 获取一个英雄 /// </summary> /// <param name="index"></param> /// <returns></returns> /// <exception cref=" "></exception> public IHeroFSM GetHero(int index) { IHeroFSM heroFsm = null; this.heroMap.TryGetValue(index, out heroFsm); return(heroFsm); }
public void Do(IBattle battle, IHeroFSM selfFSM, IHeroFSM targetFSM) { targetFSM.HeroGraphic.PlayAction("behurt"); IEnumeratorTool.StartCoroutine(CheckAniEnd(targetFSM, "behurt", () => { targetFSM.HeroGraphic.PlayAction("idle"); })); }
/// <summary> /// 获取一组英雄 /// </summary> /// <param name="indexs"></param> /// <returns></returns> public List <IHeroFSM> GetHeroes(int[] indexs) { List <IHeroFSM> heroes = new List <IHeroFSM>(); foreach (var i in indexs) { IHeroFSM hf = null; this.heroMap.TryGetValue(i, out hf); heroes.Add(hf); } return(heroes); }
public void Do(IBattle battle, IHeroFSM selfFSM, IHeroFSM targetFSM) { var o = BResources.Load <GameObject>(this.se.StrParam0); effect = GameObject.Instantiate(o).transform; //在敌方阵营的特效 需要旋转 //父节点 Transform parent = null; if (se.DoubleParams0 == 1) //单体 { if (targetFSM.Camp == 2) { effect.eulerAngles = new Vector3(0, 180, 0); } parent = battle.World.GetPlayerRootTransform(targetFSM.ID); } else if (se.DoubleParams0 == 2) { parent = battle.World.GetPlayerRootTransform(targetFSM.Camp); } else if (se.DoubleParams0 == 3) //连接 { parent = battle.World.GetPlayerRootTransform(selfFSM.Camp); var mypos = battle.World.GetPlayerPos(selfFSM.ID); var tarpos = battle.World.GetPlayerPos(targetFSM.ID); //TODO 求两个向量夹角 var v1 = new Vector2(mypos.x, mypos.z); var v2 = new Vector2(tarpos.x, tarpos.z); var dir = (v2 - v1).normalized; effect.LookAt(dir); // float angle = Vector3.Angle(mypos, tarpos); // effect.eulerAngles += new Vector3(0,angle,0); } effect.SetParent(parent, false); if (se.DoubleParams1 > 0) { IEnumeratorTool.WaitingForExec((float)se.DoubleParams1, () => { BResources.Destroy(effect); }); } }
/// <summary> /// 设置英雄位置 /// 0-5 自己 /// 6-11 敌人 /// </summary> /// <param name="index"></param> /// <param name="heroFSM"></param> public void SetHero(int index, IHeroFSM heroFSM) { heroMap[index] = heroFSM; var pos = World.GetPlayerPos(index); heroFSM.HeroGraphic.Trans.position = pos; heroFSM.HeroLogic.ID = index; //阵营划分 if (heroFSM.Camp == 1) { heroFSM.HeroGraphic.Trans.eulerAngles = new Vector3(0, 0, 0); } else if (heroFSM.Camp == 2) { heroFSM.HeroGraphic.Trans.eulerAngles = new Vector3(0, 180, 0); } }
/// <summary> /// 检查动画结束 /// </summary> /// <param name="fsm"></param> /// <param name="aniName"></param> /// <param name="callback"></param> /// <returns></returns> IEnumerator CheckAniEnd(IHeroFSM fsm, string aniName, Action callback) { //设置个最长80帧的检测 int i = 80; while (i > 0) { var aniPlayer = fsm.HeroGraphic.AniPlayer; var ani = aniPlayer.CurClip.name.Replace(".FBAni", ""); //判断动画播放完 if (ani == aniName && aniPlayer.CurAniFrame == aniPlayer.CurClip.aniFrameCount - 1) { if (callback != null) { callback(); } i = 0; } i--; yield return(null); } yield break; }
public void DoEvent(SkillEvent skillEvent, IBattle battle, IHeroFSM selfFSM, IHeroFSM targetFSM) { ISkillEvent _event = null; var cd = this.GetCalssData(skillEvent.EventName); if (cd != null) { _event = Activator.CreateInstance(cd.Type, skillEvent) as ISkillEvent; } // if (_event != null) { BDebug.Log("执行skillEvent:" + skillEvent.EventName); _event.Do(battle, selfFSM, targetFSM); } else { BDebug.LogError("未找到技能事件:" + skillEvent.EventName); } }
public void Do(IBattle battle, IHeroFSM selfFSM, IHeroFSM targetFSM) { selfFSM.HeroGraphic.Trans.DOMove(targetFSM.HeroGraphic.Trans.position, (float)this.skillEvent.DoubleParams0); }