private static IEnumerable <string> GetModifiedScriptGuids() { var guids = new HashSet <string>(); UnityAPI.AwaitForever(() => { var databaseTimestamp = File.GetLastWriteTimeUtc(BoltFlow.Paths.unitOptions); foreach (var script in UnityEngine.Resources.FindObjectsOfTypeAll <MonoScript>()) { var path = AssetDatabase.GetAssetPath(script); var guid = AssetDatabase.AssetPathToGUID(path); // Skip built-in Unity plugins, which are referenced by full path if (!path.StartsWith("Assets")) { continue; } var scriptTimestamp = File.GetLastWriteTimeUtc(Path.Combine(Paths.project, path)); if (scriptTimestamp > databaseTimestamp) { guids.Add(guid); } } }); return(guids); }
private static void UpdateTypeMappings() { using var profilerScope = ProfilingUtility.SampleBlock("UpdateTypeMappings"); typesToGuids = new Dictionary <Type, HashSet <string> >(); guidsToTypes = new Dictionary <string, HashSet <Type> >(); UnityAPI.AwaitForever(() => { foreach (var script in UnityEngine.Resources.FindObjectsOfTypeAll <MonoScript>()) { var type = script.GetClass(); // Skip scripts without types if (type == null) { continue; } var path = AssetDatabase.GetAssetPath(script); // Skip built-in Unity plugins, which are referenced by full path if (!path.StartsWith("Assets")) { continue; } var guid = AssetDatabase.AssetPathToGUID(path); // Add the GUID to the list, even if it doesn't have any type if (!guidsToTypes.ContainsKey(guid)) { guidsToTypes.Add(guid, new HashSet <Type>()); } if (!typesToGuids.ContainsKey(type)) { typesToGuids.Add(type, new HashSet <string>()); } typesToGuids[type].Add(guid); guidsToTypes[guid].Add(type); } }); }
private static IEnumerable <string> GetDeletedScriptGuids() { if (!IsUnitOptionsBuilt()) { return(Enumerable.Empty <string>()); } using (NativeUtility.Module("sqlite3.dll")) { SQLiteConnection database = null; try { HashSet <string> databaseGuids; lock (@lock) { database = new SQLiteConnection(BoltFlow.Paths.unitOptions); databaseGuids = database.Query <UnitOptionRow>($"SELECT DISTINCT {nameof(UnitOptionRow.sourceScriptGuids)} FROM {nameof(UnitOptionRow)}") .Select(row => row.sourceScriptGuids) .NotNull() .SelectMany(guids => guids.Split(',')) .ToHashSet(); } var assetGuids = UnityAPI.AwaitForever(() => UnityEngine.Resources .FindObjectsOfTypeAll <MonoScript>() .Where(script => script.GetClass() != null) .Select(script => AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(script))) .ToHashSet()); databaseGuids.ExceptWith(assetGuids); return(databaseGuids); } finally { database?.Close(); } } }