ProjectDDD/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs
2025-07-08 19:46:31 +09:00

55 lines
2.1 KiB
C#

#if !UNITY_2019_1_OR_NEWER
using System;
using System.Globalization;
using System.IO;
using System.Threading.Tasks;
namespace SingularityGroup.HotReload.Editor {
class LegacyCompileChecker : ICompileChecker {
const string timestampFilePath = PackageConst.LibraryCachePath + "/lastCompileTimestamp.txt";
public bool hasCompileErrors { get; }
const string assemblyPath = "Library/ScriptAssemblies";
bool recompile;
public LegacyCompileChecker() {
Task.Run(() => {
var info = new DirectoryInfo(assemblyPath);
if(!info.Exists) {
return;
}
var currentCompileTimestamp = default(DateTime);
foreach (var file in info.GetFiles("*.dll")) {
var fileWriteDate = file.LastWriteTimeUtc;
if(fileWriteDate > currentCompileTimestamp) {
currentCompileTimestamp = fileWriteDate;
}
}
if(File.Exists(timestampFilePath)) {
var lastTimestampStr = File.ReadAllText(timestampFilePath);
var lastTimestamp = DateTime.ParseExact(lastTimestampStr, "o", CultureInfo.CurrentCulture).ToUniversalTime();
if(currentCompileTimestamp > lastTimestamp) {
ThreadUtility.RunOnMainThread(() => {
recompile = true;
_onCompilationFinished?.Invoke();
});
}
}
Directory.CreateDirectory(Path.GetDirectoryName(timestampFilePath));
File.WriteAllText(timestampFilePath, currentCompileTimestamp.ToString("o"));
});
}
Action _onCompilationFinished;
public event Action onCompilationFinished {
add {
if(recompile && value != null) {
value();
}
_onCompilationFinished += value;
}
remove {
_onCompilationFinished -= value;
}
}
}
}
#endif