public static bool ReadDungeonFile(string fileName)
 {
     if (!TextDungeon.ReadFile(Application.dataPath + "/Resources/Saves/", fileName))
     {
         Debug.LogError("Error: Function returned false");
         return(false);
     }
     return(true);
 }
    /// <summary>
    /// TODO: Saving in Unity via UI
    /// </summary>
    /// <param name="fileName"></param>
    public static void WriteDungeonFile(TileType[][] tiles, string fileName)
    {
        if (!TextDungeon.BuildTextDungeonFile(tiles))
        {
            Debug.LogError("Error: Building the dungeon file");
        }

        if (!TextDungeon.OutputToFile(Application.dataPath + "/Resources/Saves/", fileName, TextDungeon.OutputData))
        {
            Debug.LogError("Error: Outputting to file.");
        }
    }
    /// <summary>
    /// Set the enemies in avaiable rooms.
    /// </summary>
    private void SetEnemies()
    {
        bool result = TextDungeon.BuildTextDungeonFile(m_tiles);

        if (!result)
        {
            return;
        }

        var levelStr = TextDungeon.OutputData;

        // TODO: Optimise algorithm by cross referencing each room cell ID with the
        //          levelStr


        var rows    = 0;
        var columns = 0;
        var flag    = false;

        for (int i = 0; i < levelStr.Length; i++)
        {
            if (levelStr[i] == StringLiterals.NewLine)
            {
                flag = true;
                columns++;
            }

            if (!flag)
            {
                rows++;
            }
        }


        for (int i = 0; i < columns; i++)
        {
            for (int j = 0; j < rows; j++)
            {
                if (i < 0 || i >= columns)
                {
                    continue;
                }

                if (j < 0 || j >= rows)
                {
                    continue;
                }

                var idx = i * rows + j;

                if (levelStr[idx] != StringLiterals.Floor)
                {
                    continue;
                }



                int kk = 0;
                for (int _y = i - 1; _y <= i + 1; _y++)
                {
                    for (int _x = j - 1; _x <= j + 1; _x++)
                    {
                        if (_y < 0 || _y >= columns)
                        {
                            continue;
                        }

                        if (_x < 0 || _x >= rows)
                        {
                            continue;
                        }

                        var _idx = _y * rows + _x;

                        if (levelStr[_idx] != StringLiterals.Floor)
                        {
                            continue;
                        }

                        Debug.Log("ID - " + _x + ", " + _y + " is a floor");

                        kk++;
                    }
                }


                if (kk >= 8)
                {
                    m_tiles[i][j] |= TileType.Enemy;

                    var strBuilder = new System.Text.StringBuilder(levelStr);
                    strBuilder[idx] = StringLiterals.Enemy;
                    levelStr        = strBuilder.ToString();
                }
            }
        }


        /// for(int i = 0; i < columns; i++)
        /// {
        ///     for(int j = 0; j < rows; j++)
        ///     {
        ///         var idx = i * rows + j;
        ///         if(levelStr[idx] == StringLiterals.Enemy)
        ///         {
        ///
        ///         }
        ///     }
        /// }


        // foreach(var room in m_rooms)
        // {
        //     var enemyTileIDs = room.PossibleEnemyPositions(m_tiles);
        //     if(enemyTileIDs.Length < m_maxEnemiesPerRoom)
        //         m_maxEnemiesPerRoom = (uint)enemyTileIDs.Length;
        //
        //
        //     int fails = 0;
        //     for(int i = 0; i < m_maxEnemiesPerRoom; i++)
        //     {
        //         if(fails >= 100) break;
        //
        //         var rand = Random.Range(0, enemyTileIDs.Length);
        //         var id = enemyTileIDs[rand];
        //         var x = id % room.m_roomWidth;
        //         var y = id / room.m_roomHeight;
        //
        //         // if it already equals enemy
        //         if((m_tiles[x][y] & TileType.Enemy) == TileType.Enemy)
        //         {
        //             i--;
        //             fails++;
        //         }
        //         else
        //         {
        //             m_tiles[x][y] |= TileType.Enemy;
        //         }
        //     }
        //
        //
        //     // TODO: Add evil enemies to corridors.
        //     //          if a corridor is > 5 add to firth tile.
        //
        // }
    }