}//fInicializar public void WrapperMove(CaminoSimple camino) { path = camino.camino; rotaciones = camino.vectorRotaciones; //this.gameObject.transform.eulerAngles = new Vector3(0, 0, 0); StartCoroutine(MoverGranjerito()); }
public CaminoComponente(int ox, int oy, int dx, int dy, string tpG, CaminoSimple cam) { originX = ox; originY = oy; destX = dx; destY = dy; tipoGranjero = tpG; ruta = cam; }
public IEnumerator GenerarYEnviarGranjero(CaminoSimple camino, string tipoGranjero) { //Genera un granjero en la posicion que se le indica y en envia al destino que se le indica Piece p = tablero.pieces[camino.camino.First().gridX, camino.camino.First().gridY]; //lista //granjeros.Add(Instantiate(Resources.Load<GameObject>("Sprites/Prefabs/Caminos/Cube")) as GameObject); granjeros.Add(Instantiate(Resources.Load <GameObject>("Sprites/Prefabs/Comp/" + tipoGranjero)) as GameObject); //granjeros[granjeros.Count-1].transform.SetParent(p.transform, false); granjeros[granjeros.Count - 1].transform.position = (Vector3.right * camino.camino.First().gridX) + (Vector3.forward * camino.camino.First().gridY) + boardOffset + pieceOffset; //enviar granjeros[granjeros.Count - 1].GetComponent <GranjeroController>().Inicializar(); granjeros[granjeros.Count - 1].GetComponent <GranjeroController>().WrapperMove(camino); yield break; } //fGenerarYEnviarGranjero
} //fMostrarMensajePantalla private void CreacionRutasPiso(ref CaminoSimple ruta) { Vector3 dif; Vector3 auxEsquina = ruta.camino[1].worldPosition - ruta.camino[0].worldPosition; //string mensaje =""; int grados = 0; string dir = ""; int numSpriteCam = 0; int xCam, yCam; for (int i = 0; i < ruta.camino.Count; i++) { /* if(ruta.camino[i].worldPosition != Vector3.zero){ * mensaje += " "+ruta.camino[i].worldPosition.ToString(); * } */ if (i < ruta.camino.Count - 1) { dif = ruta.camino[i + 1].worldPosition - ruta.camino[i].worldPosition; } else { dif = ruta.camino[i].worldPosition - ruta.camino[i].worldPosition; } xCam = ruta.camino[i].gridX; yCam = ruta.camino[i].gridY; if (dif.x > 0 && (dif.z == auxEsquina.z)) { //Debug.Log("de abajo hacia arriba"); //0 dir = "arr"; numSpriteCam = 0; grados = 90; } if (dif.x < 0 && (dif.z == auxEsquina.z)) { //Debug.Log("de arriba hacia abajo"); //0 dir = "aba"; numSpriteCam = 0; grados = -90; } if (dif.z > 0 && (dif.x == auxEsquina.x)) { //Debug.Log("de der a izq"); //1 dir = "izq"; numSpriteCam = 1; grados = 0; } if (dif.z < 0 && (dif.x == auxEsquina.x)) { //Debug.Log("de izq a der"); //1 dir = "der"; numSpriteCam = 1; grados = 180; } //mensaje += dir+" "+numSpriteCam; if (dif != auxEsquina) { //Debug.Log("esquina "+dif.ToString()); //Debug.Log("dir: "+dir); //dir es la direccion previa if ((dir == "der" && dif.x > 0) || (dir == "aba" && dif.z > 0)) { //3 //Debug.Log("3"); numSpriteCam = 3; if (dir == "der") //si antes iba hacia der ahora va hacia arr { dir = "arr"; grados = 90; } else if (dir == "aba") //si antes iba hacia aba ahora va hacia izq { dir = "izq"; grados = 0; } } if ((dir == "der" && dif.x < 0) || (dir == "arr" && dif.z > 0)) { //5 //Debug.Log("5"); numSpriteCam = 5; if (dir == "der") //si antes iba hacia der ahora va hacia aba { dir = "aba"; grados = -90; } else if (dir == "arr") //si antes iba hacia arr ahora va hacia izq { dir = "izq"; grados = 0; } } if ((dir == "aba" && dif.z < 0) || (dir == "izq" && dif.x > 0)) { //4 //Debug.Log("4"); numSpriteCam = 4; if (dir == "aba") //si antes iba hacia aba ahora va hacia la derecha { dir = "der"; grados = 180; } else if (dir == "izq") //si antes iba hacia izq ahora va hacia arr { dir = "arr"; grados = 90; } } if ((dir == "arr" && dif.z < 0) || (dir == "izq" && dif.x < 0)) { //6 //Debug.Log("6"); numSpriteCam = 6; if (dir == "arr") //si antes iba hacia arriba ahora va hacia la derecha { dir = "der"; grados = 180; } else if (dir == "izq") //si antes iba hacia izq ahora va hacia aba { dir = "aba"; grados = -90; } } //mensaje += " esquina "+numSpriteCam; } auxEsquina = dif; if (tablero.pieces[ruta.camino.Last().gridX, ruta.camino.Last().gridY].getIDPiece() != "Export") { //colocar el numero de sprite correcto para cada parte del camino if (MatrizCaminos[xCam, yCam].valor == -1) //si la posicion esta vacia, se coloca una pieza simple { MatrizCaminos[xCam, yCam].valor = numSpriteCam; } else //si la posicion esta ocupada se coloca un overlap { MatrizCaminos[xCam, yCam].valor = MatrizCaminosResultados[MatrizCaminos[xCam, yCam].valor, numSpriteCam]; //borrar pieza anterior Destroy(MatrizCaminos[xCam, yCam].calle); } if (i != 0 && i < ruta.camino.Count - 1) //no coloca la pieza de inicio del camino { MatrizCaminos[xCam, yCam].calle = Instantiate(Resources.Load <GameObject>("Sprites/Prefabs/Caminos/" + MatrizCaminos[xCam, yCam].valor)) as GameObject; MatrizCaminos[xCam, yCam].calle.transform.SetParent(tablero.transform, true); MatrizCaminos[xCam, yCam].calle.transform.eulerAngles = Vector3.up * -90; MatrizCaminos[xCam, yCam].calle.transform.position = ruta.camino[i].worldPosition + (Vector3.up * 0.001f); } } ruta.vectorRotaciones.Add(grados); } ruta.vectorRotaciones.Add(grados); //ultima pos, para evitar error //Debug.Log("camino: "+mensaje ); }
public CaminoSimple FindPath(int xo, int yo, int xd, int yd, int GrDest) { CaminoSimple cam = new CaminoSimple(); List <Node> path = null; llegoAlFinal = false; Node startNode = grid.grid[xo, yo]; //origen Node targetNode = grid.grid[xd, yd]; //destino List <Node> openSet = new List <Node>(); //los nodos que faltan HashSet <Node> closedSet = new HashSet <Node>(); //los que ya se evaluaron openSet.Add(startNode); //añado la posicion inicial while (openSet.Count > 0) { Node currentNode = openSet[0]; for (int i = 1; i < openSet.Count; i++) { if (openSet[i].fCost < currentNode.fCost || openSet[i].fCost == currentNode.fCost && openSet[i].hCost < currentNode.hCost) { currentNode = openSet[i]; } } //for openSet.Remove(currentNode); //eliminar nodo closedSet.Add(currentNode); //agregar el nodo como ya usado if (currentNode.Equals(targetNode)) { path = new List <Node>(); Node actualN = targetNode; while (!actualN.Equals(startNode)) { path.Add(actualN); actualN = actualN.parent; } path.Add(startNode); path.Reverse(); llegoAlFinal = true; cam.camino = path; return(cam); } int newMvmCtNeb; //new movement cost to neighbour foreach (Node neighbour in grid.GetNeighbours(currentNode)) { if (neighbour.type == -2 || closedSet.Contains(neighbour)) //no caminable // { } else { if (neighbour.type == -1 || neighbour.type == GrDest) //si es piso o es mismo tipo que el destino { newMvmCtNeb = currentNode.gCost + GetDistance(currentNode, neighbour); if (newMvmCtNeb < neighbour.gCost || !openSet.Contains(neighbour)) { neighbour.gCost = newMvmCtNeb; neighbour.hCost = GetDistance(neighbour, targetNode); neighbour.parent = currentNode; if (!openSet.Contains(neighbour)) { openSet.Add(neighbour); } } //if } } //else } //foreach } //while return(null); } //findpath