/// <summary>
        /// Take the supplied data and transform to the required array format required by the builder
        /// CSV file data should be comma separated for each map cell and a newline for each row, e.g.
        ///     1,1,2,3
        ///     4,2,1,3
        ///
        ///  CSV string data supplied should be comma separated as CSV file but each row separated by pipe ('|')
        ///  The map may be 0 or 1 indexed for the first item so ensure the start index value is set
        /// </summary>
        /// <param name="csvData">Tilemap data in string format. More for debugging but may be useful.</param>
        /// <param name="csvFile">Tilemap data as a file</param>
        /// <returns></returns>
        private static int[,] GetInputData(TileMapBuilder tb, string csvData, string csvFile)
        {
            string[] rowData;
            if (csvData == null && csvFile == null)
            {
                return(null);
            }
            if (csvData != null)
            {
                rowData = csvData.Split('|');
            }
            else if (csvFile != null)
            {
                rowData = File.ReadAllLines(csvFile);
            }
            else
            {
                return(null);
            }

            int[,] data;
            try
            {
                data = tb.TransformInputData(rowData);
            }
            catch (Exception e)
            {
                throw e;
            }
            return(data);
        }
        private void GenerateSceneFile()
        {
            string[]       rowData;
            TileMapBuilder tb = new TileMapBuilder();

            if (CSVString.Text.Trim() != "")
            {
                rowData = CSVString.Text.Trim().Split('|');
            }
            else if (CSVImport.Text.Trim() != "")
            {
                rowData = File.ReadAllLines(CSVImport.Text.Trim());
            }
            else
            {
                rowData = null;
            }

            try
            {
                tb.SetMapData(tb.TransformInputData(rowData));
            }
            catch (Exception e)
            {
                MessageBox.Show($"Failed: {e.Message}");
            }

            string sceneFile = tb
                               .SetCellSizePixels(uint.Parse(CellWidth.Text), uint.Parse(CellHeight.Text))
                               .SetTileSheetSizeUnits(uint.Parse(UnitWidth.Text), uint.Parse(UnitHeight.Text))
                               .SetTileSheetStartIndex(uint.Parse(StartCellIndex.Text))
                               .SetTileSheet(ImportSheet.Text)
                               .SetFormat(int.Parse(InternalFormat.Text))
                               .SetLoadSteps(int.Parse(InternalSteps.Text))
                               .SetNodeType(InternalMapClass.Text)
                               .SetTileSetType(InternalTileClass.Text)
                               .SetGodotTileWidth(uint.Parse(InternalMapWidth.Text))
                               .SetMapDataEmptyCellIndex(int.Parse(MapIgnoreCell.Text))
                               .SetNodeName(NodeName.Text)
                               .Build();

            try
            {
                File.WriteAllText(OutFile.Text, sceneFile);
                MessageBox.Show($"File written to:\n {OutFile.Text}");
            }
            catch (Exception e)
            {
                MessageBox.Show($"Failed to write output file: {OutFile.Text}\n\n{e.Message}");
            }
        }