Ejemplo n.º 1
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();
            }
        }
    }