//切换目标 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); }
//切换目标 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(); }
//搜索目标 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); }