using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; namespace VertexColor.ScenePartition.Editor { public class SceneIdComparer : IComparer { 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 uint id = 0; public string filePath = null; public string[] data = null; public SerializableSortedSet references = new SerializableSortedSet(); public ScenePartition(string filePath) { this.filePath = filePath; 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 (!uint.TryParse(match.Groups[1].Value, out id)) 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 (uint.TryParse(match.Groups[1].Value, out uint fileNumber)) { if (fileNumber == 0) continue; // 0 == nothing. references.Add(fileNumber); } } } } } }