Exemplo n.º 1
0
        //切换目标
        private IEnumerator PlayChangeTargetAction(BattleHeroChangeTargetAction action)
        {
            if (action == null)
            {
                UtilityHelper.LogError("Error BattleHeroChangeTargetAction");
                yield break;
            }

            UpdateRenderState(BattleUnitRenderState.Action);
            action.newTargetUnit.battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Selected);

            yield return(EGameConstL.WaitForHalfSecond);

            UpdateRenderState(BattleUnitRenderState.Normal);
            action.newTargetUnit.battleUnitRenderer.UpdateRenderState(BattleUnitRenderState.Normal);
        }
Exemplo n.º 2
0
        //切换目标
        private IEnumerator PlayChangeTargetAction(BattleHeroChangeTargetAction action)
        {
            if (action == null)
            {
                UtilityHelper.LogError("Error BattleHeroChangeTargetAction");
                yield break;
            }

            AddBattleBeSelected(this, EGameConstL.Color_Cyan);

            AddBattleBeSelected(action.newTargetUnit.battleUnitRenderer, EGameConstL.Color_Yellow);

            //yield return EGameConstL.WaitForTouchedScreen;

            ClearAllSelectedBattleUnit();
        }
Exemplo n.º 3
0
        //搜索目标
        private TargetSearchResult SearchTarget(List <BattleAction> actions)
        {
            //按照距离排序敌人
            UtilityObjs.battleUnits.Clear();
            //只考虑可以行动的
            for (int i = 0; i < enemyTeam.battleUnits.Count; ++i)
            {
                if (enemyTeam.battleUnits[i].CanAction)
                {
                    UtilityObjs.battleUnits.Add(enemyTeam.battleUnits[i]);
                }
            }

            //天下无敌了,还有谁??
            if (UtilityObjs.battleUnits.Count == 0)
            {
                return(TargetSearchResult.Inexistence);
            }

            //结果类型
            TargetSearchResult searchResult = TargetSearchResult.InRange;

            //按照距离排序
            UtilityObjs.battleUnits.Sort(delegate(BattleUnit b1, BattleUnit b2)
            {
                return(mapGrid.Distance(b1.mapGrid) - mapGrid.Distance(b2.mapGrid));
            });

            //暂时不添加复杂的逻辑,只选择直线距离最近的
            BattleUnit newTarget     = null;
            GridUnit   newTargetGrid = null;

            for (int i = 0; i < UtilityObjs.battleUnits.Count; ++i)
            {
                //如果当前目标就在范围内
                if (mapGrid.Distance(UtilityObjs.battleUnits[i].mapGrid) <= 1)
                {
                    //设置目标,但是不需要移动
                    newTarget = UtilityObjs.battleUnits[i];
                    toTargetPath.Clear();
                    targetGrid   = null;
                    searchResult = TargetSearchResult.InRange;
                    break;
                }

                //目标不在周围需要移动
                newTargetGrid = battleField.battleMap.GetEmptyGrid(mapGrid, UtilityObjs.battleUnits[i].mapGrid, toTargetPath, mobility);
                if (newTargetGrid == null)
                {
                    //UtilityHelper.LogWarning(battleUnitID + "找不到空格子了,看看下一个吧");
                    continue;
                }
                else
                {
                    newTarget    = UtilityObjs.battleUnits[i];
                    searchResult = TargetSearchResult.NeedMove;
                    break;
                }
            }

            if (newTarget == null)
            {
                UtilityHelper.LogWarning("确实找不到了");
                targetBattleUnit = null;
                targetGrid       = null;
                toTargetPath.Clear();
                if (actions != null)
                {
                    //创建一个warning
                    BattleHeroWarningAction action = new BattleHeroWarningAction(this, "No target:" + battleUnitID);
                    actions.Add(action);
                }
                return(TargetSearchResult.Inexistence);
            }

            //目标不一致,切换目标
            if (targetBattleUnit != newTarget)
            {
                //切换目标
                BattleHeroChangeTargetAction action = new BattleHeroChangeTargetAction(this);
                action.lastTargetUnit = targetBattleUnit;
                action.newTargetUnit  = newTarget;

                //设置当前目标以及格子
                targetBattleUnit = newTarget;
                actions.Add(action);
            }

            //移动的格子重新设置
            targetGrid = newTargetGrid;

            return(searchResult);
        }