private int CalcuatePathValue(List <Node> path)
    {
        int value, resultingValue = 0, numCapturedTiles = 0;

        //Step through path, tally each captured
        for (int steps = 0; steps < path.Count; steps++)
        {
            Node          node = path[steps];
            ClickableTile tile = map.tiles[node.pos.x, node.pos.y];

            int sum = tile.GetValue() + steps;
            if (sum % 10 == 0)
            {
                numCapturedTiles += tile.GetValue() / 10;
            }

            //last node in path, check what final value will be
            if (steps == path.Count - 1)
            {
                if (sum % 10 == 0)
                {
                    resultingValue = 1;
                }
                else
                {
                    resultingValue = sum;
                }
            }
        }

        // Values increase as captured tiles increase and resulting values decrease
        value = numCapturedTiles - resultingValue;
        return(value);
    }
    public int GetTileValue(Coord target)
    {
        ClickableTile ct    = tiles[target.x, target.y];
        int           value = ct.GetValue();

        //Debug.Log("Tile value at " + target + " is " + value);
        return(value);
    }
 private void UpdateInformation()
 {
     currentTile    = map.tiles[unit.pos.x, unit.pos.y];
     currentNode    = map.nodes[unit.pos.x, unit.pos.y];
     currentValue   = currentTile.GetValue();
     availableTiles = unit.GetAvailableTileOptions(currentNode, unit.GetMoveSpeed());
     paths.Clear();
     sortedPaths.Clear();
 }
 void ClearDrawPath()
 {
     while (drawPathStack.Count > 0)
     {
         Node          popped = drawPathStack.Pop();
         ClickableTile tile   = map.tiles[popped.pos.x, popped.pos.y];
         if (!tile.IsAvailable())
         {
             tile.Highlight(false);
         }
         tile.SetValueText(tile.GetValue());
     }
 }
    void DrawPath()
    {
        if (Input.GetButtonUp("Fire1"))
        {
            //We have let go, return to idle state
            state = ControllerState.idle;

            //All moves used?
            if (drawPathStack.Count - 1 == selectedUnit.GetMoveSpeed())
            {
                //Is this a valid path that leads to a destination tile?
                Node finalNode = drawPathStack.Peek();
                if (map.tiles[finalNode.pos.x, finalNode.pos.y].IsAvailable())
                {
                    //Feed our unit this path
                    Debug.Log("sending drawn path to unit");
                    List <Node> path = new List <Node>(drawPathStack);
                    path.Reverse();
                    selectedUnit.SetPath(path);
                }
            }
            else
            {
                map.ResetTileDrawPath();
            }
            ClearDrawPath();
            return;
        }

        Node       currentNode = drawPathStack.Peek();
        RaycastHit hit;

        //Check if we are hovering over tile
        if (MouseCast(out hit))
        {
            if (hit.transform.tag == "Tile")
            {
                ClickableTile tempTile = hit.transform.GetComponent <ClickableTile>();
                Node          tempNode = map.nodes[tempTile.pos.x, tempTile.pos.y];

                //Is the tile a walkable neighbor tile?
                if (NodeIsNeighbour(currentNode, tempNode) && map.UnitCanEnterTile(tempNode.pos, selectedUnit))
                {
                    //Is it the previous path node?
                    if (drawPathStack.Contains(tempNode))
                    {
                        //pop current position
                        Node          popped = drawPathStack.Pop();
                        ClickableTile tile   = map.tiles[popped.pos.x, popped.pos.y].GetComponent <ClickableTile>();
                        Debug.Log(tile.GetValue());
                        tile.DrawHighlight(false, .01f);
                        tile.SetValueText(tile.GetValue());

                        audioSource.volume = .4f;
                        audioSource.pitch  = 1.9f;
                        audioSource.clip   = sndClickUp;
                        audioSource.Play();

                        //adjust available tiles
                        var coordOptions = selectedUnit.GetAvailableTileOptions(tempNode, selectedUnit.GetMoveSpeed() - drawPathStack.Count + 1);
                        map.ResetTileAvailability();
                        List <Map.Coord> coordList = new List <Map.Coord>();
                        for (int i = 0; i < selectedUnit.coordOptions.Length; i++)
                        {
                            if (coordOptions.Contains(selectedUnit.coordOptions[i]))
                            {
                                coordList.Add(selectedUnit.coordOptions[i]);
                            }
                        }
                        map.MakeTilesAvailable(coordList.ToArray());
                    }
                    //If not, we can push this neighbor is we have remianing moves, one step closer to destination
                    else if (drawPathStack.Count - 1 < selectedUnit.GetMoveSpeed())
                    {
                        {
                            //adjust available tiles
                            var coordOptions = selectedUnit.GetAvailableTileOptions(tempNode, selectedUnit.GetMoveSpeed() - drawPathStack.Count);
                            map.ResetTileAvailability();
                            List <Map.Coord> coordList = new List <Map.Coord>();
                            for (int i = 0; i < selectedUnit.coordOptions.Length; i++)
                            {
                                if (coordOptions.Contains(selectedUnit.coordOptions[i]))
                                {
                                    coordList.Add(selectedUnit.coordOptions[i]);
                                }
                            }
                            map.MakeTilesAvailable(coordList.ToArray());

                            drawPathStack.Push(tempNode);
                            //highlight tempTile? show its part of path
                            tempTile.DrawHighlight(true, .02f);
                            tempTile.SetValueText(tempTile.GetValue() + drawPathStack.Count - 1);

                            audioSource.volume = .95f;
                            audioSource.pitch  = (((float)drawPathStack.Count - 1f) / (float)selectedUnit.GetMoveSpeed()) * .1f + .9f;
                            audioSource.clip   = sndClickDown;
                            audioSource.Play();
                        }
                    }
                }
            } //end MouseCast
        }
    }