I have a file that looks similar to:
background_color{ 104, 184, 104 }
tile_pattern{
id = "1",
ground = "empty",
default_layer = 2,
x = 0,
y = 0,
width = 8,
height = 16,
repeat_mode = "none",
}
tile_pattern{
id = "999",
ground = "traversable",
default_layer = 0,
x = 40,
y = 1000,
width = 8,
height = 8,
}
tile_pattern{
id = "abyss_bridge",
ground = "traversable",
default_layer = 0,
x = 280,
y = 448,
width = 16,
height = 16,
}
tile_pattern{
id = "acid",
ground = "prickles",
default_layer = 0,
x = { 712, 728, 744 },
y = { 384, 384, 384 },
width = 16,
height = 16,
}
tile_pattern{
id = "lava",
ground = "lava",
default_layer = 0,
x = { 696, 696, 696, 696 },
y = { 368, 384, 400, 384 },
width = 16,
height = 16,
}
tile_pattern{
id = "hole_parallax.1-1",
ground = "hole",
default_layer = 0,
x = 312,
y = 224,
width = 16,
height = 16,
scrolling = "self",
}
tile_pattern{
id = "air_duct.1",
ground = "wall",
default_layer = 0,
x = 880,
y = 48,
width = 32,
height = 24,
repeat_mode = "none",
}
border_set{
id = "wall_hole",
inner = true,
pattern_0 = "wall_hole.4-1",
pattern_1 = "wall_hole.1-1",
pattern_2 = "wall_hole.3-1",
pattern_3 = "wall_hole.2-1",
pattern_4 = "wall_hole.corner.2-1",
pattern_5 = "wall_hole.corner.1-1",
pattern_6 = "wall_hole.corner.3-1",
pattern_7 = "wall_hole.corner.4-1",
pattern_8 = "wall_hole.corner_reverse.2-1",
pattern_9 = "wall_hole.corner_reverse.1-1",
pattern_10 = "wall_hole.corner_reverse.3-1",
pattern_11 = "wall_hole.corner_reverse.4-1",
}
border_set{
id = "wall_low-1",
pattern_0 = "wall_low.4-1",
pattern_1 = "wall_low.1-1",
pattern_2 = "wall_low.3-1",
pattern_3 = "wall_low.2-1",
pattern_4 = "wall_low.corner.2-1",
pattern_5 = "wall_low.corner.1-1",
pattern_6 = "wall_low.corner.3-1",
pattern_7 = "wall_low.corner.4-1",
pattern_8 = "wall_low.corner_reverse.2-1b",
pattern_9 = "wall_low.corner_reverse.1-1b",
pattern_10 = "wall_low.corner_reverse.3-1b",
pattern_11 = "wall_low.corner_reverse.4-1b",
}
I have it loaded into a string called datString
. I am trying to match all of the tile_pattern
parts in a single regex expression.
This is what I have so far:
//tilePatterns = new List<TilePatternData>();
//tile_pattern{
//id = "10", (string)
//ground = "empty", (string)
//default_layer = 2, (number)
//(x = 72,) (x = { 712, 728, 744 },) (number or table)(only matching the number, have to add in the table)
//(y = 0,) (y = { 384, 384, 384 },) (number or table)(only matching the number, have to add in the table)
//width = 8,
//height = 16,
//frame_delay(number, optional)(None in test file)
//mirror_loop (boolean, optional)(None in test file)
//scrolling (string, optional)(The Ones in the test file do not have a repeat_mode
//repeat_mode = "none", (string, optional)
//}
parts = new Regex("tile_pattern\\s*{\\s*(id\\s*=\\s*\".+\",\\s*ground\\s*=\\s*\".+\",\\s*default_layer\\s*=\\s*-*\\d+,\\s*x\\s*=\\s*\\d+,\\s*y\\s*=\\s*\\d+,\\s*width\\s*=\\s*\\d+,\\s*height\\s*=\\s*\\d+,\\s*\\w*\\s*=*\\s*\"*\\w*\"*),*\\s*}");
match = parts.Match(datFileString);
Debug.Log("Match " + match.Success + " : " + match.Length);
while (match.Success)
{
// To easily see which ones are getting loaded in
Debug.Log(match.Groups[1]);
//TilePatternData tilePatternData = new TilePatternData();
//tilePatternData.LoadFromDatFile(match.Groups[1].ToString());
//tilePatterns.Add(tilePatternData);
match = match.NextMatch();
}
which returns a match length of 138 (should be 4830) at a glance through my debug log the only ones that seem to be missing are the 32 patterns that have x = { 712, 728, 744 }, I have not figured out how to add this into my capture group yet any help would be appreciated. Also how would I add the 3 optional fields to make sure if the are all there they would get matched?
Need to add to pattern
tile_pattern{
id = "acid",
ground = "prickles",
default_layer = 0,
x = { 712, 728, 744 },
y = { 384, 384, 384 },
width = 16,
height = 16,
}