public Path_TileGraph(World world)
        {
            nodes = new Dictionary <Tile, Path_Node <Tile> >();

            for (int x = 0; x < world.size.X; x++)
            {
                for (int y = 0; y < world.size.Y; y++)
                {
                    Tile t = world.GetTileAt(x, y);

                    if (t.movementCost > 0)
                    {
                        Path_Node <Tile> n = new Path_Node <Tile>();
                        n.data = t;
                        nodes.Add(t, n);
                    }
                }
            }

            // Debug.WriteLine("Path_TileGraph: Created " + nodes.Count + " nodes.");

            int edgeCount = 0;

            foreach (Tile t in nodes.Keys)
            {
                Path_Node <Tile> n = nodes[t];

                List <Path_Edge <Tile> > edges = new List <Path_Edge <Tile> >();

                Tile[] neighbours = t.GetNeighbours();

                for (int i = 0; i < neighbours.Length; i++)
                {
                    if (neighbours[i] != null && neighbours[i].movementCost > 0 && IsClippingCorner(t, neighbours[i]) == false)
                    {
                        Path_Edge <Tile> e = new Path_Edge <Tile>();
                        e.cost = neighbours[i].movementCost;
                        e.node = nodes[neighbours[i]];

                        edges.Add(e);
                        edgeCount++;
                    }
                }

                n.edges = edges.ToArray();
            }

            //Debug.WriteLine("Path_TileGraph: Created " + edgeCount + " edges.");
        }
        private void GenerateEdgesByTile(Tile t)
        {
            Path_Node <Tile>         n     = nodes[t];
            List <Path_Edge <Tile> > edges = new List <Path_Edge <Tile> >();

            Tile[] neighbours = t.GetNeighbours();

            for (int i = 0; i < neighbours.Length; i++)
            {
                if (neighbours[i] != null && neighbours[i].movementCost > 0 && IsClippingCorner(t, neighbours[i]) == false)
                {
                    Path_Edge <Tile> e = new Path_Edge <Tile>();
                    e.cost = neighbours[i].movementCost;
                    e.node = nodes[neighbours[i]];

                    edges.Add(e);
                }
            }
            n.edges = edges.ToArray();
        }