breakpoint

before update unity version
This commit is contained in:
CortexCore
2024-03-04 18:45:21 +08:00
parent e2fbb14dd5
commit 9ad58a2ff4
5423 changed files with 14757 additions and 653 deletions

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Drawing.Printing;
using System.Text;
using BITKit.IO;
using Cysharp.Threading.Tasks;
@@ -16,6 +17,7 @@ namespace BITKit.Mod
public class UnityModLoader : MonoBehaviour
{
private static readonly ConcurrentDictionary<string,IMod> _mods=new();
private static readonly ConcurrentDictionary<string,ResourcePackage> _packages=new();
private void OnEnable()
{
ModService.OnModLoadAsync += OnModLoadAsync;
@@ -26,65 +28,116 @@ namespace BITKit.Mod
ModService.OnModLoadAsync -= OnModLoadAsync;
ModService.OnModUnloadAsync -= OnModUnloadAsync;
}
private UniTask OnModUnloadAsync(IMod mod)
private void OnDestroy()
{
_mods.Clear();
_packages.Clear();
}
private async UniTask OnModUnloadAsync(IMod mod)
{
switch (mod)
{
case IAssetMod:
_packages.TryRemove(mod.PackageName,out var package);
package.ClearPackageSandbox();
await package.ClearAllCacheFilesAsync();
await package.ClearUnusedCacheFilesAsync();
YooAssets.DestroyPackage(mod.PackageName);
YooAssetUtils.UnregisterPackage(mod.PackageName);
YooAssetUtils.UnregisterResourcePackage(_packages[mod.PackageName]);
break;
}
return UniTask.CompletedTask;
}
private async UniTask OnModLoadAsync(IMod arg)
{
switch (arg)
try
{
case IAssetMod:
var package = YooAssets.CreatePackage(arg.PackageName);
var defaultHostServer = new RemoteServices(
arg.FolderPath,arg.FolderPath)
{
switch (arg)
{
case IAssetMod:
var package = YooAssets.CreatePackage(arg.PackageName);
};
var queryServices = new LocalQueryServices(arg.PackageName);
var initParameters = new HostPlayModeParameters
{
BuildinQueryServices = queryServices,
RemoteServices = defaultHostServer
};
var initOperation = package.InitializeAsync(initParameters);
await initOperation;
if(initOperation.Status == EOperationStatus.Succeed)
{
YooAssetUtils.RegisterPackage(arg.PackageName);
var defaultHostServer = new RemoteServices(
arg.FolderPath, arg.FolderPath)
{
// var logBuilder = new StringBuilder();
// logBuilder.AppendLine("该包中的资源:");
// foreach (var x in package.GetAssetInfos(arg.Tags))
// {
// logBuilder.AppendLine(x.Address);
// }
// logBuilder.AppendLine("默认包中的资源");
// foreach (var x in YooAssets.GetAssetInfos(arg.Tags))
// {
// logBuilder.AppendLine(x.Address);
// }
// BIT4Log.Log<UnityModLoadAssetTester>(logBuilder.ToString());
BIT4Log.Log<UnityModLoadAssetTester>($"资源包{arg.PackageName}初始化成功!");
}
else
{
BIT4Log.Log<UnityModLoadAssetTester>($"资源包初始化失败:{initOperation.Error}");
}
break;
};
var queryServices = new LocalQueryServices(arg.PackageName);
var initParameters = new HostPlayModeParameters
{
BuildinQueryServices = queryServices,
RemoteServices = defaultHostServer
};
var initOperation = package.InitializeAsync(initParameters);
await initOperation;
if(initOperation.Status!=EOperationStatus.Succeed)
{
throw new Exception(initOperation.Error);
}
var updateOperation = package.UpdatePackageVersionAsync(false);
await updateOperation;
if (updateOperation.Status != EOperationStatus.Succeed)
{
throw new Exception(updateOperation.Error);
}
var updateManifestOperation = package.UpdatePackageManifestAsync(updateOperation.PackageVersion, false);
await updateManifestOperation;
if(updateManifestOperation.Status!=EOperationStatus.Succeed)
{
throw new Exception(updateManifestOperation.Error);
}
var downloader = package.CreateResourceDownloader(8, 0);
downloader.BeginDownload();
await downloader;
if (downloader.Status != EOperationStatus.Succeed)
{
throw new Exception(downloader.Error);
}
_packages.TryAdd(arg.PackageName, package);
YooAssetUtils.RegisterResourcePackage(package);
YooAssetUtils.RegisterPackage(arg.PackageName);
// var logBuilder = new StringBuilder();
// logBuilder.AppendLine("该包中的资源:");
// foreach (var x in package.GetAssetInfos(arg.Tags))
// {
// logBuilder.AppendLine(x.Address);
// }
// logBuilder.AppendLine("默认包中的资源");
// foreach (var x in YooAssets.GetAssetInfos(arg.Tags))
// {
// logBuilder.AppendLine(x.Address);
// }
// BIT4Log.Log<UnityModLoadAssetTester>(logBuilder.ToString());
BIT4Log.Log<UnityModLoader>($"<color=green>资源包{arg.PackageName}初始化成功</color>");
break;
}
}
catch (Exception e)
{
BIT4Log.LogException(e);
}
}