Esempio n. 1
0
    }//fInicializar

    public void WrapperMove(CaminoSimple camino)
    {
        path       = camino.camino;
        rotaciones = camino.vectorRotaciones;
        //this.gameObject.transform.eulerAngles = new Vector3(0, 0, 0);
        StartCoroutine(MoverGranjerito());
    }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
    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
Esempio n. 4
0
    }    //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 );
    }
Esempio n. 5
0
    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