ScenePartition/Runtime/ScenePartition.cs

81 lines
2.2 KiB
C#
Raw Permalink Normal View History

using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
namespace VertexColor.ScenePartition
{
public class SceneIdComparer : IComparer<ScenePartition>
{
public int Compare(ScenePartition x, ScenePartition y)
{
if (x.id == y.id)
{
return 0;
}
if (x.id < y.id)
{
return -1;
}
return 1;
}
}
[System.Serializable]
public class ScenePartition
{
public ulong id = 0;
//public ulong classId = 0;
public string filePath = null; // TODO: Only store relative path.
//public string[] data = null;
public LongSortedSet references = new LongSortedSet();
public ScenePartition(string filePath)
{
this.filePath = filePath;
string[] data = File.ReadAllLines(filePath);
if (data == null || data.Length == 0) return;
{ // Get id.
string pattern = @"&(\d+)";
// Find all matches using regex
Match match = Regex.Match(data[0], pattern);
if (!match.Success) return;
if (!ulong.TryParse(match.Groups[1].Value, out id)) return;
}
//{ // Get class id.
// string pattern = @"!u!(\d+)";
// // Find all matches using regex
// Match match = Regex.Match(data[0], pattern);
// if (!match.Success) return;
// if (!long.TryParse(match.Groups[1].Value, out classId)) return;
//}
{ // Get references.
string pattern = @"fileID:\s(\d+)";
for (int i = 0; i < data.Length; i++)
{
// Find the match using regex
Match match = Regex.Match(data[i], pattern);
if (!match.Success) continue;
if (ulong.TryParse(match.Groups[1].Value, out ulong fileNumber))
{
if (fileNumber == 0) continue; // 0 == nothing.
references.Add(fileNumber);
}
}
}
}
}
}