static void Main(string[] args) { //Console.WriteLine("Hello"); //Queue<int> queue = new Queue<int>(); //queue.Enqueue(0); //queue.Enqueue(1); //queue.Enqueue(2); //queue.Enqueue(3); ////Console.WriteLine("Q: " + queue.Dequeue()); ////Console.WriteLine("Q: " + queue.Dequeue()); ////Console.WriteLine("Q: " + queue.Dequeue()); ////Console.WriteLine("Q: " + queue.Last<int>()); //Console.ReadLine(); GameData game = GameData.Instance = new GameData(); AI ai = new AI_V2(); GameExecution.InitGameAndZoneInfo(game, DateTime.Now.Ticks); while (true) { GameExecution.InitTurnInfoAndCallStartUpdate(game, DateTime.Now.Ticks); } }
static void Main(string[] args) { GameData game = GameData.Instance = new GameData(); AI ai = new AI_V2(); GameExecution.InitGameAndZoneInfo(game, DateTime.Now.Ticks); while (true) { GameExecution.InitTurnInfoAndCallStartUpdate(game, DateTime.Now.Ticks); } }
/// <summary> /// Faz a movimentação seguindo o melhor caminho. /// Algoritmo utilizado é o AStar /// </summary> /// <param name="hitPosition"></param> private void MovePath(Vector3 hitPosition) { this.moveByPath = true; Nodo nodeOrigin = this.GetComponent<Nodo>(); nodeOrigin.ListaAdj.Clear(); List<GameObject> nodesDestino = new List<GameObject>(GameObject.FindGameObjectsWithTag("NodoDestino")); nodesDestino.ForEach(linq => { GameObject.Destroy(linq); }); Instantiate(this.nodoDestino, hitPosition, Quaternion.identity); this.nodoDestino.transform.position = hitPosition; List<GameObject> nodesAdj = new List<GameObject>(GameObject.FindGameObjectsWithTag("Nodo")); if (nodesAdj.Count > 0) { nodesAdj.ForEach(linq => { linq.GetComponent<Nodo>().ListaAdj.Remove(this.nodoDestino); linq.GetComponent<Nodo>().adjacentes = linq.GetComponent<Nodo>().ListaAdj.ToArray(); }); List<GameObject> tst = nodesAdj.Where(l => l.GetComponent<Nodo>().adjacentes.Contains(nodoDestino)).ToList(); // TODO: Verificar fazer adjacencia por um determinado Raio de circunferência. List<GameObject> originAdj = nodesAdj.Where(linq => Vector3.Distance(nodeOrigin.transform.position, linq.transform.position) < nodeDistance).ToList(); foreach (GameObject n in originAdj) { nodeOrigin.ListaAdj = new List<Nodo>(); Nodo node = n.GetComponent<Nodo>(); nodeOrigin.ListaAdj.Add(node); } nodeOrigin.adjacentes = nodeOrigin.ListaAdj.ToArray(); nodesAdj.ForEach(linq => { Nodo node = linq.GetComponent<Nodo>(); node.G = Vector3.Distance(this.transform.position, linq.transform.position) + Vector3.Distance(linq.transform.position, hitPosition); node.H = Vector3.Distance(linq.transform.position, hitPosition); }); List<GameObject> adj = nodesAdj.Where(linq => Vector3.Distance(hitPosition, linq.transform.position) < nodeDistance).ToList(); foreach (GameObject item in adj) { Nodo node = item.GetComponent<Nodo>(); node.ListaAdj.Add(this.nodoDestino); node.adjacentes = node.ListaAdj.ToArray(); } } GameExecution exc = new GameExecution(); exc.criaNodos(nodeOrigin, this.nodoDestino); pathNodes = exc.buscaAStar(nodeOrigin, this.nodoDestino); pathNodes.Remove(this.GetComponent<Nodo>()); }