using AX.InputSystem; using AX.MessageSystem; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// /// 车辆多选寻路 /// public class MultiSelectNAV : ResourceLoadPanel { //public static MultiSelectNAV GetInstance; public Toggle MultiSelectNAVButton; public Toggle InstallNAVButton; public RectTransform Content; public GameObject MultiSelectNAVPanel; public GameObject Item; public List SelectCars; public List TargetPoint; public bool pathfindingFlag; void Start() { //GetInstance = this; MultiSelectNAVButton.onValueChanged.AddListener(ShowUI); InstallNAVButton.onValueChanged.AddListener(InstallNAV); } private void InstallNAV(bool Ison) { if (Ison) { TargetPoint.Clear(); MessageDispatcher.AddListener("PATH_FINDING_COMMAND", PathFinding); CancelSelectedCommand.Instance.Execute(0, null); } else MessageDispatcher.RemoveListener("PATH_FINDING_COMMAND", PathFinding); pathfindingFlag = Ison; InputManager.MutiSelectFind = Ison; if (!Ison) { if(!pathfindingFlag && TargetPoint.Count > 0) { //MultiSelectNavPath.instance.SetPathFind(TargetPoint, SelectCars); for (int i = 0; i < SelectCars.Count; i++) { SelectCars[i].GetComponent().MuitiNav(TargetPoint, i); } } } //if (!pathfindingFlag && TargetPoint.Count > 0) //{ // var count = TargetPoint.Count; // var list = AgentController.LiSan(TargetPoint[count - 1], SelectCars.Count, new Vector3(9, 0, 9)); // int indexer = 0; // if (SelectCars.Count>0&&list.Count>0) // { // //开始多选车辆的巡礼操作 // SelectCars.ForEach((X) => // { // TargetPoint[count - 1] = list[indexer]; // X.GetComponent().AutoPathFinding(TargetPoint); // indexer++; // }); // // TargetPoint.Clear(); // } //} } public void AddSelectCar(GameObject Car) { if (SelectCars.Contains(Car)) return; SelectCars.Add(Car); var index = NAVSelectCarItem.SelectCarItem.FindIndex((X) => { return X.SelectCar == Car; }); if (index >= 0) { NAVSelectCarItem.SelectCarItem[index].Toggle.isOn = true; return; } var item = Instantiate(Item, Content); var scipts = item.GetComponent(); scipts.Text.text = Car.GetComponent().Affiliation + "-" + Car.GetComponent().Number; scipts.SelectCar = Car; } public void RemoveSelectCar(GameObject Car) { if (SelectCars.Contains(Car)) { Car.GetComponent().Stop(); SelectCars.Remove(Car); } } private void PathFinding(IMessage obj) { if (!pathfindingFlag) return; var data = (PathFindingCmdArgs)obj.Data; InputManager.pointerObj.transform.position = data.hitPoint; if (SelectCars.Count > 0) { for (int i = 0; i < SelectCars.Count; i++) { SelectCars[i].GetComponent().StopAllCoroutines(); } bool haspath= SelectCars[0].GetComponent().CheckHasPath(data.hitPoint); if (haspath) { TargetPoint.Add(data.hitPoint); } else { ResourceLoadWindow.Instance.LoadTextHintWindow("该点无法到达", 1f); } } else { ResourceLoadWindow.Instance.LoadTextHintWindow("没有选中任何车辆", 1f); InstallNAVButton.isOn = false; return; } } private void ShowUI(bool Ison) { pathfindingFlag = false; SelectCars.Clear(); TargetPoint.Clear(); MultiSelectNAVPanel.SetActive(Ison); InstallNAVButton.gameObject.SetActive(Ison); InstallNAVButton.isOn = false; if (Ison) MessageDispatcher.AddListener("RADIO_SELECTED_COMMAND", RadioSelect); else MessageDispatcher.RemoveListener("RADIO_SELECTED_COMMAND", RadioSelect); } private void RadioSelect(IMessage obj) { var gameObjID = (long)obj.Sender; var hitObj = EntitiesManager.Instance.GetEntityByID(gameObjID); if (hitObj.gameObject.tag.Equals(GlobalVariable.CarTag)) { if (SelectCars.Contains(hitObj)) MessageDispatcher.SendMessage("RemoveSelectCar", hitObj); else AddSelectCar(hitObj); } } public void Clear() { MultiSelectNAVButton.isOn = false; } private void Update() { if (!pathfindingFlag && TargetPoint.Count > 0) { } } }