forked from bbpanzu/bb-fnf-mods
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChartParser.hx
80 lines (63 loc) · 1.67 KB
/
ChartParser.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package;
import flixel.util.FlxStringUtil;
using StringTools;
class ChartParser
{
static public function parse(songName:String, section:Int):Array<Dynamic>
{
var IMG_WIDTH:Int = 8;
var regex:EReg = new EReg("[ \t]*((\r\n)|\r|\n)[ \t]*", "g");
var csvData = FlxStringUtil.imageToCSV(Paths.file('data/' + songName + '/' + songName + '_section' + section + '.png'));
var lines:Array<String> = regex.split(csvData);
var rows:Array<String> = lines.filter(function(line) return line != "");
csvData.replace("\n", ',');
var heightInTiles = rows.length;
var widthInTiles = 0;
var row:Int = 0;
// LMAOOOO STOLE ALL THIS FROM FLXBASETILEMAP LOLOL
var dopeArray:Array<Int> = [];
while (row < heightInTiles)
{
var rowString = rows[row];
if (rowString.endsWith(","))
rowString = rowString.substr(0, rowString.length - 1);
var columns = rowString.split(",");
if (columns.length == 0)
{
heightInTiles--;
continue;
}
if (widthInTiles == 0)
{
widthInTiles = columns.length;
}
var column = 0;
var pushedInColumn:Bool = false;
while (column < widthInTiles)
{
// the current tile to be added:
var columnString = columns[column];
var curTile = Std.parseInt(columnString);
if (curTile == null)
throw 'String in row $row, column $column is not a valid integer: "$columnString"';
if (curTile == 1)
{
if (column < 4)
dopeArray.push(column + 1);
else
{
var tempCol = (column + 1) * -1;
tempCol += 4;
dopeArray.push(tempCol);
}
pushedInColumn = true;
}
column++;
}
if (!pushedInColumn)
dopeArray.push(0);
row++;
}
return dopeArray;
}
}