using System.Diagnostics; using Godot; using TBL.GodotSharp.Content.Package; using Zio.FileSystems; namespace TBL.GodotSharp.Content { /// /// 内容包容器 /// public class PackageContainer : Node { /// /// 叠加文件系统 /// public readonly AggregateFileSystem FileSystem = new AggregateFileSystem(); public override void _Ready() { Name = nameof(PackageContainer); } /// /// 卸载所有内容包 /// public void UnloadPackages() { for (var i = GetChildCount() - 1; i >= 0; i--) { if (GetChild(i) is PackageNode packageNode) { RemoveChild(packageNode); packageNode.QueueFree(); } } } /// /// 重装载所有内容包,将内部目录全部以内部内容包加载 /// public void ReloadPackages() => ReloadPackages(string.Empty); /// /// 指定内部内容包目录,重装载所有内容包 /// /// 内部内容包根目录,传入 null 可以不装载内部内容包 public void ReloadPackages(string internalPackageRoot) { UnloadPackages(); // 添加内部内容包 if (internalPackageRoot != null) { var title = ProjectSettings.GetSetting("application/config/name") as string; var assembly = Game.Instance.GetType().Assembly; var versionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); AddChild(new InternalPackage(new PackageNode.Info(title, versionInfo.CompanyName, versionInfo.ProductVersion), internalPackageRoot)); } } } }