Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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");
     }));
 }
Exemplo n.º 4
0
        /// <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);
                });
            }
        }
Exemplo n.º 6
0
        /// <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;
        }
Exemplo n.º 8
0
        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);
 }