Example #1
0
    /// <summary>
    /// La funcion se encarga de crear el camino que seguira el enemigo a partir de los waypoints y si el camino es cerrado o no
    /// </summary>
    private void CreatePath()
    {
        // Añadimos la posicion actual como inicial en el camino
        path.Add(transform.position);

        // Para cada waypoint calculamos su camino al siguiente
        for (int i = 0; i < wayPoints.Length - 1; i++)
        {
            // Aplicando el A estrella obtenemos un camino
            List <int> waypointPath = board.AStarAlgorithm(board.PositionToIndex(wayPoints[i].position), board.PositionToIndex(wayPoints[i + 1].position));

            // Añadimos todos estos indices al final de nuestro path
            foreach (int index in waypointPath)
            {
                path.Add(board.IndexToPosition(index, gameObject));
            }
        }

        if (closedPath)
        {
            // Aplicando el A estrella obtenemos un camino
            List <int> waypointPath = board.AStarAlgorithm(board.PositionToIndex(wayPoints[wayPoints.Length - 1].position), board.PositionToIndex(wayPoints[0].position));

            // Añadimos todos estos indices al final de nuestro path
            foreach (int index in waypointPath)
            {
                path.Add(board.IndexToPosition(index, gameObject));
            }

            // Si el camino es cerrado eliminamos el ultimo punto ya que es el inicial
            path.RemoveAt(path.Count - 1);
        }
    }
Example #2
0
    void FixedUpdate()
    {
        if (canPlay)
        {
            // Elegimos el rayo que vamos a usar para el raycast
            cameraRay = Camera.main.ScreenPointToRay(Input.mousePosition);

            // Hacemos el raycast y vemos si hemos golpeado alguna casilla
            if (Physics.Raycast(cameraRay, out cameraHit) && !EventSystem.current.IsPointerOverGameObject() && !isMoving)
            {
                if (cameraHit.collider.name.Contains("Plataforma"))
                {
                    actualHit = board.PositionToIndex(cameraHit.point);

                    if (board.isTile(actualHit))
                    {
                        if (previousHit != actualHit)
                        {
                            // Vaciamos el camino anterior
                            RestartPath();

                            // Calculamos el camino
                            path.AddRange(board.AStarAlgorithm(path[path.Count - 1], actualHit, false));

                            // Dibujamos el camino
                            DrawPath();

                            // Guardamos el indice de la casilla cambiada
                            previousHit = actualHit;
                        }
                    }
                    else if (previousHit != -1)
                    {
                        // Cambiamos el material de la anterior casillas
                        board.RemoveMaterial(path[path.Count - 1], selectedMaterial);
                        path.ForEach(tile => board.RemoveMaterial(tile, cursorMaterial));
                        previousHit = -1;
                        path.Clear();
                    }
                }
            }
            else if (previousHit != -1 && path.Count > 1)
            {
                board.RemoveMaterial(path[path.Count - 1], selectedMaterial);
                path.ForEach(tile => board.RemoveMaterial(tile, cursorMaterial));
                previousHit = -1;
                path.Clear();
            }
        }
    }