//分别对应攻击和移动的函数 protected virtual IEnumerator MoveToTar() { List <Part> route = new List <Part>(); route = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), tarChess.GetComponent <Part>()); audio.clip = music[0]; audio.PlayOneShot(music[0]); for (int i = 0; i < route.Count; i++) { yield return(new WaitForSeconds(0.5f)); transform.position = Vector3.Lerp(transform.position, route[i].getPosition(), 0.99f); currentPart = route[i].transform; if (currentPart.GetComponent <Part>().life == 0) { currentPart.GetComponent <Part>().belong = true; } if (i == route.Count - 1) { animator.SetBool("ismove", false); currentPart.GetComponent <Part>().isControl = true; } } GameManager.instance.anbeavior = true; GameManager.instance.game_state.update_Townlist(); now_movelim--; }
void chooseTarget() { List <Part> List_Town = new List <Part>(); Part min = null; float mindis = 99999; if (GameManager.instance.getEnemyNum() < GameManager.instance.getPlayerNum()) { List_Town = GameManager.instance.game_state.enemy_town; } else { List_Town = GameManager.instance.game_state.play_town; } foreach (Part p in List_Town) { if (p == null) { continue; } int dis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), p); if (mindis > dis) { mindis = dis; min = p; } } if (min != null) { show_List = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), min); near_city = min.transform; if (show_List.Count > 2) { if (!show_List[now_movedis].isControl && show_List[now_movedis].thistype != PartType.WATER) { tarChess = show_List[now_movedis].GetComponent <Transform>(); } else { show_List = Chess_manager.getShowArea(currentPart.GetComponent <Part>(), now_movedis, true); //Debug.Log(show_List.Count); int standdis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), min); for (int i = 0; i < show_List.Count; i++) { int dis = Chess_manager.GetRouteDis(show_List[i], min); if ((show_List[i] != null && show_List[i].thistype == PartType.WATER && arm_type == Arm_type.ARMY) || (dis > standdis)) { show_List.Remove(show_List[i]); } } int index1 = (int)(Random.Range(0, 1) * (show_List.Count - 1)); if (show_List[index1].isControl || (show_List[index1].thistype == PartType.WATER && this.arm_type == Arm_type.ARMY)) { tarChess = currentPart; } else { tarChess = show_List[index1].GetComponent <Transform>(); } } } else { tarChess = currentPart; } } show_List = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), tarChess.GetComponent <Part>()); }
void getnearest_chess_and_dis() { show_List.Clear(); List <ChessControl> player_arm = new List <ChessControl>(); player_arm = GameManager.player_arm; ChessControl min = null; float mindis = 99999; getnowPart(); foreach (ChessControl p in player_arm) { if (p == null) { continue; } int dis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), p.currentPart.GetComponent <Part>()); if (mindis > dis) { mindis = dis; min = p; } } if (min != null) { show_List = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), min.currentPart.GetComponent <Part>()); near_player = min.transform; if (show_List.Count > 2) { if (!show_List[now_movedis].isControl) { tarChess = show_List[now_movedis].GetComponent <Transform>(); } else { show_List = Chess_manager.getShowArea(currentPart.GetComponent <Part>(), now_movedis, true); //Debug.Log(show_List.Count); int standdis = Chess_manager.GetRouteDis(currentPart.GetComponent <Part>(), min.currentPart.GetComponent <Part>()); for (int i = 0; i < show_List.Count; i++) { int dis = Chess_manager.GetRouteDis(show_List[i], min.currentPart.GetComponent <Part>()); if ((show_List[i] != null && show_List[i].thistype == PartType.WATER && arm_type == Arm_type.ARMY) || (dis > standdis)) { show_List.Remove(show_List[i]); } } int index1 = (int)(Random.Range(0, 1) * (show_List.Count - 1)); if (show_List[index1].isControl || (show_List[index1].thistype == PartType.WATER && this.arm_type == Arm_type.ARMY)) { tarChess = currentPart; } else { tarChess = show_List[index1].GetComponent <Transform>(); } } } else { tarChess = currentPart; } } show_List = Chess_manager.searchRoute(currentPart.GetComponent <Part>(), tarChess.GetComponent <Part>()); }