Merge branch 'main' of http://www.liubai.site:3000/ninemine/Convention-Unity-Demo
This commit is contained in:
@@ -200,65 +200,92 @@ namespace Demo.Game
|
|||||||
var rootFileName = (string)MainConfig.FindItem("root");
|
var rootFileName = (string)MainConfig.FindItem("root");
|
||||||
var rootObject = new ToolFile(Path.Combine(content.RootSourceDir, rootFileName));
|
var rootObject = new ToolFile(Path.Combine(content.RootSourceDir, rootFileName));
|
||||||
rootObject.MustExistsPath();
|
rootObject.MustExistsPath();
|
||||||
var rootGameObject = new GameObject(rootObject.GetName(true)).AddComponent<RootObject>();
|
// 缓存MD5与重编译检查
|
||||||
MainObject = rootGameObject;
|
|
||||||
rootGameObject.transform.SetParent(transform);
|
|
||||||
rootGameObject.ScriptName = rootObject.GetName(true);
|
|
||||||
rootGameObject.audioSystem = MainAudio;
|
|
||||||
rootGameObject.LoadedScriptSet.Add(rootObject);
|
|
||||||
rootGameObject.EnableScript(content.RootSourceDir, this);
|
|
||||||
rootGameObject.SetContent(nameof(SongOffset), SongOffset);
|
|
||||||
rootGameObject.SetContent(nameof(IsAutoPlay), IsAutoPlay ? 1 : 0);
|
|
||||||
rootGameObject.SetContent("SongLength", MainAudio.CurrentClip.length);
|
|
||||||
static IEnumerator Foo(IEnumerator ir)
|
|
||||||
{
|
|
||||||
Stack<IEnumerator> loadingTask = new();
|
|
||||||
loadingTask.Push(ir);
|
|
||||||
while (loadingTask.Count > 0)
|
|
||||||
{
|
|
||||||
if (loadingTask.Peek().MoveNext())
|
|
||||||
{
|
|
||||||
if (loadingTask.Peek().Current is IEnumerator next)
|
|
||||||
loadingTask.Push(next);
|
|
||||||
else if (loadingTask.Peek().Current is ScriptableObject)
|
|
||||||
yield return null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
loadingTask.Pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
yield break;
|
|
||||||
}
|
|
||||||
yield return Foo(rootGameObject.ParseFromScriptFile2Expr(rootObject));//ConventionUtility.AvoidFakeStop(rootGameObject.ParseFromScriptFile2Expr(rootObject));
|
|
||||||
int applyDownCount = 0;
|
|
||||||
void NDFS(ScriptableObject current)
|
|
||||||
{
|
|
||||||
foreach (var child in current.Childs)
|
|
||||||
{
|
|
||||||
NDFS(child);
|
|
||||||
}
|
|
||||||
if (current.IsScriptApply == false)
|
|
||||||
{
|
|
||||||
applyDownCount++;
|
|
||||||
IEnumerator NDFSFoo()
|
|
||||||
{
|
|
||||||
yield return current.ApplyScript();
|
|
||||||
applyDownCount--;
|
|
||||||
}
|
|
||||||
ConventionUtility.StartCoroutine(NDFSFoo());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
NDFS(rootGameObject);
|
|
||||||
yield return new WaitUntil(() => applyDownCount == 0);
|
|
||||||
var rootObjectDir = rootObject.GetParentDir();
|
var rootObjectDir = rootObject.GetParentDir();
|
||||||
ToolFile projectHashFile = rootObjectDir | ".cache" | "projectHash.json";
|
ToolFile cacheDir = rootObjectDir | ".cache";
|
||||||
|
var projectHashFile = cacheDir | "projectHash.json";
|
||||||
Dictionary<string, string> projectHash = new();
|
Dictionary<string, string> projectHash = new();
|
||||||
foreach (var path in rootGameObject.LoadedScriptSet)
|
bool isRecompile = true;
|
||||||
|
if(!!projectHashFile)
|
||||||
{
|
{
|
||||||
projectHash.Add(path, new ToolFile(path).CalculateHash());
|
projectHash = projectHashFile.LoadAsJson<Dictionary<string, string>>();
|
||||||
|
foreach (var (file,md5) in projectHash)
|
||||||
|
{
|
||||||
|
if(new ToolFile(file).CalculateHash()!=md5)
|
||||||
|
{
|
||||||
|
isRecompile = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var rootGameObject = new GameObject(rootObject.GetName(true)).AddComponent<RootObject>();
|
||||||
|
MainObject = rootGameObject;
|
||||||
|
rootGameObject.transform.SetParent(transform);
|
||||||
|
rootGameObject.ScriptName = rootObject.GetName(true);
|
||||||
|
rootGameObject.audioSystem = MainAudio;
|
||||||
|
rootGameObject.LoadedScriptSet.Add(rootObject);
|
||||||
|
rootGameObject.EnableScript(content.RootSourceDir, this);
|
||||||
|
rootGameObject.SetContent(nameof(SongOffset), SongOffset);
|
||||||
|
rootGameObject.SetContent(nameof(IsAutoPlay), IsAutoPlay ? 1 : 0);
|
||||||
|
rootGameObject.SetContent("SongLength", MainAudio.CurrentClip.length);
|
||||||
|
if (isRecompile||true)
|
||||||
|
{
|
||||||
|
static IEnumerator Foo(IEnumerator ir)
|
||||||
|
{
|
||||||
|
Stack<IEnumerator> loadingTask = new();
|
||||||
|
loadingTask.Push(ir);
|
||||||
|
while (loadingTask.Count > 0)
|
||||||
|
{
|
||||||
|
if (loadingTask.Peek().MoveNext())
|
||||||
|
{
|
||||||
|
if (loadingTask.Peek().Current is IEnumerator next)
|
||||||
|
loadingTask.Push(next);
|
||||||
|
else if (loadingTask.Peek().Current is ScriptableObject)
|
||||||
|
yield return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
loadingTask.Pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
yield return Foo(rootGameObject.ParseFromScriptFile2Expr(rootObject));//ConventionUtility.AvoidFakeStop(rootGameObject.ParseFromScriptFile2Expr(rootObject));
|
||||||
|
int applyDownCount = 0;
|
||||||
|
void NDFS(ScriptableObject current)
|
||||||
|
{
|
||||||
|
foreach (var child in current.Childs)
|
||||||
|
{
|
||||||
|
NDFS(child);
|
||||||
|
}
|
||||||
|
if (current.IsScriptApply == false)
|
||||||
|
{
|
||||||
|
applyDownCount++;
|
||||||
|
IEnumerator NDFSFoo()
|
||||||
|
{
|
||||||
|
yield return current.ApplyScript();
|
||||||
|
applyDownCount--;
|
||||||
|
}
|
||||||
|
ConventionUtility.StartCoroutine(NDFSFoo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NDFS(rootGameObject);
|
||||||
|
yield return new WaitUntil(() => applyDownCount == 0);
|
||||||
|
foreach (var path in rootGameObject.LoadedScriptSet)
|
||||||
|
{
|
||||||
|
projectHash.Add(path, new ToolFile(path).CalculateHash());
|
||||||
|
}
|
||||||
|
projectHashFile.SaveAsJson(projectHash);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var projectBinaryFile = cacheDir | "project.dat";
|
||||||
|
using var stream = new FileInfo(projectBinaryFile).OpenRead();
|
||||||
|
using var reader = new BinaryReader(stream);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
projectHashFile.SaveAsJson(projectHash);
|
|
||||||
float loadRootObjectEndTime = Time.realtimeSinceStartup;
|
float loadRootObjectEndTime = Time.realtimeSinceStartup;
|
||||||
float loadRootObjectElapsed = (loadRootObjectEndTime - loadRootObjectStartTime) * 1000f;
|
float loadRootObjectElapsed = (loadRootObjectEndTime - loadRootObjectStartTime) * 1000f;
|
||||||
Debug.Log($"[GameInit] Load Root Object 耗时: {loadRootObjectElapsed:F2} ms", this);
|
Debug.Log($"[GameInit] Load Root Object 耗时: {loadRootObjectElapsed:F2} ms", this);
|
||||||
|
|||||||
Reference in New Issue
Block a user