216 lines
12 KiB
C#
216 lines
12 KiB
C#
#if UNITY_EDITOR
|
|
#nullable enable
|
|
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace ShrinkSDK.Installer
|
|
{
|
|
internal enum ShrinkSdkPackageLayer
|
|
{
|
|
Context,
|
|
Host,
|
|
Feature,
|
|
Integration,
|
|
Tooling
|
|
}
|
|
|
|
internal sealed class ShrinkSdkPackageEntry
|
|
{
|
|
public ShrinkSdkPackageEntry(string displayName, string summary, string packageName, string version,
|
|
ShrinkSdkPackageLayer layer, bool requiresUniTask = false)
|
|
{
|
|
DisplayName = displayName;
|
|
Summary = summary;
|
|
PackageName = packageName;
|
|
Version = version;
|
|
Layer = layer;
|
|
RequiresUniTask = requiresUniTask;
|
|
}
|
|
|
|
public string DisplayName { get; }
|
|
public string Summary { get; }
|
|
public string PackageName { get; }
|
|
public string Version { get; }
|
|
public ShrinkSdkPackageLayer Layer { get; }
|
|
public bool RequiresUniTask { get; }
|
|
}
|
|
|
|
internal sealed class ShrinkSdkPackageBundle
|
|
{
|
|
public ShrinkSdkPackageBundle(string displayName, string summary,
|
|
IReadOnlyList<ShrinkSdkPackageEntry> packages,
|
|
IReadOnlyList<ShrinkSdkPackageEntry>? installRoots = null,
|
|
bool recommended = false)
|
|
{
|
|
DisplayName = displayName;
|
|
Summary = summary;
|
|
Packages = packages;
|
|
InstallRoots = installRoots ?? packages;
|
|
Recommended = recommended;
|
|
}
|
|
|
|
public string DisplayName { get; }
|
|
public string Summary { get; }
|
|
public IReadOnlyList<ShrinkSdkPackageEntry> Packages { get; }
|
|
public IReadOnlyList<ShrinkSdkPackageEntry> InstallRoots { get; }
|
|
public bool Recommended { get; }
|
|
}
|
|
|
|
internal static class ShrinkSdkPackageCatalog
|
|
{
|
|
internal const string RegistryName = "ShrinkSDK";
|
|
internal const string RegistryUrl = "https://git.crash.work/api/packages/ShrinkSDK/npm/";
|
|
internal const string RegistryScope = "com.cneicy";
|
|
internal const string UniTaskPackageName = "com.cysharp.unitask";
|
|
internal const string UniTaskGitUrl = "https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask#7c0f199fe0d3fc528024488ccd671e6c7b27745b";
|
|
|
|
internal static readonly ShrinkSdkPackageEntry ContextCore = Package(
|
|
"Context 核心", "可逆效应、响应式依赖与组件生命周期,是框架的组合基础。",
|
|
"com.cneicy.shrink-context-core", "0.2.0", ShrinkSdkPackageLayer.Context, true);
|
|
internal static readonly ShrinkSdkPackageEntry ContextAppAdapter = Package(
|
|
"Context 应用适配", "用 ContextLoader 承载 ShrinkApp 组合根和运行时诊断。",
|
|
"com.cneicy.shrink-context-app-adapter", "0.2.0", ShrinkSdkPackageLayer.Context, true);
|
|
internal static readonly ShrinkSdkPackageEntry ContextEventBusAdapter = Package(
|
|
"Context 事件适配", "把事件订阅纳入 Context 的安装与自动撤回。",
|
|
"com.cneicy.shrink-context-eventbus-adapter", "0.2.0", ShrinkSdkPackageLayer.Context, true);
|
|
|
|
internal static readonly ShrinkSdkPackageEntry AppCore = Package(
|
|
"应用宿主", "统一启动、服务门面与应用生命周期。",
|
|
"com.cneicy.shrink-app-core", "0.2.0", ShrinkSdkPackageLayer.Host, true);
|
|
internal static readonly ShrinkSdkPackageEntry StarterBasic = Package(
|
|
"基础应用起步包", "默认 Context 组合根,包含命令、存档、网络及其集成。",
|
|
"com.cneicy.shrink-app-starter-basic", "0.3.0", ShrinkSdkPackageLayer.Host, true);
|
|
|
|
internal static readonly ShrinkSdkPackageEntry Command = Package(
|
|
"命令系统", "命令路由、参数、权限与自动注册。",
|
|
"com.cneicy.shrink-command", "0.3.0", ShrinkSdkPackageLayer.Feature, true);
|
|
internal static readonly ShrinkSdkPackageEntry DataSaver = Package(
|
|
"存档系统", "异步存档、设置、备份恢复与数据观察。",
|
|
"com.cneicy.shrink-datasaver", "2.3.0", ShrinkSdkPackageLayer.Feature, true);
|
|
internal static readonly ShrinkSdkPackageEntry EventBus = Package(
|
|
"事件总线", "类型安全事件、请求结果、调度与代码生成。",
|
|
"com.cneicy.shrink-eventbus", "2.1.0", ShrinkSdkPackageLayer.Feature, true);
|
|
internal static readonly ShrinkSdkPackageEntry EventBusEntities = Package(
|
|
"Entities 事件适配", "将事件总线接入 Unity Entities。",
|
|
"com.cneicy.shrink-eventbus-entities", "0.1.2", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry ModFramework = Package(
|
|
"模组框架", "Context 托管的模组生命周期、热替换与外部 DLL 加载。",
|
|
"com.cneicy.shrink-mod-framework", "0.3.0", ShrinkSdkPackageLayer.Feature, true);
|
|
internal static readonly ShrinkSdkPackageEntry Network = Package(
|
|
"网络系统", "消息、RPC、权限、序列化与多种传输层。",
|
|
"com.cneicy.shrink-network", "0.3.0", ShrinkSdkPackageLayer.Feature, true);
|
|
internal static readonly ShrinkSdkPackageEntry Tutorial = Package(
|
|
"引导系统", "可复用的步骤式引导、遮罩、锚点与进度存储。",
|
|
"com.cneicy.shrink-tutorial", "0.2.0", ShrinkSdkPackageLayer.Feature);
|
|
|
|
internal static readonly ShrinkSdkPackageEntry CommandApp = Package(
|
|
"命令 - 应用集成", "以原生 Context 组件向应用宿主发布命令服务。",
|
|
"com.cneicy.shrink-command-integration-app", "0.2.0", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry CommandEventBus = Package(
|
|
"命令 - 事件集成", "通过事件总线执行命令并发布执行状态。",
|
|
"com.cneicy.shrink-command-integration-eventbus", "0.2.0", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry CommandNetwork = Package(
|
|
"命令 - 网络集成", "通过网络 RPC 执行远程命令。",
|
|
"com.cneicy.shrink-command-integration-network", "0.2.0", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry DataSaverApp = Package(
|
|
"存档 - 应用集成", "以原生 Context 组件向应用宿主发布存档服务。",
|
|
"com.cneicy.shrink-datasaver-integration-app", "0.2.0", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry DataSaverEventBus = Package(
|
|
"存档 - 事件集成", "通过事件总线请求读写并观察存档变化。",
|
|
"com.cneicy.shrink-datasaver-integration-eventbus", "2.2.0", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry NetworkApp = Package(
|
|
"网络 - 应用集成", "以原生 Context 组件向应用宿主发布网络服务。",
|
|
"com.cneicy.shrink-network-integration-app", "0.2.0", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry NetworkEventBus = Package(
|
|
"网络 - 事件集成", "把网络消息与事件请求桥接为可撤回的 Context 组件。",
|
|
"com.cneicy.shrink-network-integration-eventbus", "0.2.0", ShrinkSdkPackageLayer.Integration, true);
|
|
internal static readonly ShrinkSdkPackageEntry SharedCodeGen = Package(
|
|
"共享代码生成", "各功能包使用的编译期注册表基础设施。",
|
|
"com.cneicy.shrink-shared-codegen", "0.1.1", ShrinkSdkPackageLayer.Tooling);
|
|
internal static readonly ShrinkSdkPackageEntry RuntimeAbstractions = Package(
|
|
"运行时抽象", "Unity 与其他 .NET 宿主共用的平台服务合同。",
|
|
"com.cneicy.shrink-runtime-abstractions", "0.1.0", ShrinkSdkPackageLayer.Tooling);
|
|
|
|
internal static readonly IReadOnlyList<ShrinkSdkPackageEntry> Packages = new[]
|
|
{
|
|
ContextCore, ContextAppAdapter, ContextEventBusAdapter,
|
|
AppCore, StarterBasic,
|
|
Command, DataSaver, EventBus, ModFramework, Network, Tutorial,
|
|
CommandApp, CommandEventBus, CommandNetwork,
|
|
DataSaverApp, DataSaverEventBus,
|
|
NetworkApp, NetworkEventBus, EventBusEntities,
|
|
SharedCodeGen, RuntimeAbstractions
|
|
};
|
|
|
|
internal static readonly IReadOnlyList<ShrinkSdkPackageBundle> Bundles = new[]
|
|
{
|
|
new ShrinkSdkPackageBundle(
|
|
"基础应用(推荐)",
|
|
"直接获得以 ContextLoader 为组合根的命令、存档、网络基础应用。",
|
|
new[]
|
|
{
|
|
ContextCore, ContextAppAdapter, ContextEventBusAdapter, AppCore,
|
|
Command, DataSaver, EventBus, Network,
|
|
CommandApp, CommandEventBus, CommandNetwork,
|
|
DataSaverApp, DataSaverEventBus, NetworkApp, NetworkEventBus,
|
|
StarterBasic
|
|
},
|
|
new[] { StarterBasic, ContextEventBusAdapter },
|
|
recommended: true),
|
|
new ShrinkSdkPackageBundle(
|
|
"Context 最小基座",
|
|
"只安装组合内核,适合自行编写 IShrinkComponent 与组合根。",
|
|
new[] { ContextCore }),
|
|
new ShrinkSdkPackageBundle(
|
|
"Context 应用宿主",
|
|
"安装应用宿主、ContextLoader 适配与事件生命周期适配,不预装业务模块。",
|
|
new[] { ContextCore, EventBus, AppCore, ContextAppAdapter, ContextEventBusAdapter },
|
|
new[] { ContextAppAdapter, ContextEventBusAdapter }),
|
|
new ShrinkSdkPackageBundle(
|
|
"事件与命令",
|
|
"安装 Context 托管的事件订阅和命令执行链。",
|
|
new[] { ContextCore, EventBus, ContextEventBusAdapter, Command, CommandEventBus },
|
|
new[] { ContextEventBusAdapter, CommandEventBus }),
|
|
new ShrinkSdkPackageBundle(
|
|
"存档能力",
|
|
"安装存档系统及 Context 托管的事件桥接。",
|
|
new[] { ContextCore, EventBus, ContextEventBusAdapter, DataSaver, DataSaverEventBus },
|
|
new[] { ContextEventBusAdapter, DataSaverEventBus }),
|
|
new ShrinkSdkPackageBundle(
|
|
"网络能力",
|
|
"安装网络系统及 Context 托管的事件桥接。",
|
|
new[] { ContextCore, EventBus, ContextEventBusAdapter, Network, NetworkEventBus },
|
|
new[] { ContextEventBusAdapter, NetworkEventBus }),
|
|
new ShrinkSdkPackageBundle(
|
|
"模组开发",
|
|
"安装以 Context 管理生命周期和热替换的模组框架。",
|
|
new[] { ContextCore, EventBus, ModFramework },
|
|
new[] { ModFramework }),
|
|
new ShrinkSdkPackageBundle(
|
|
"常用完整套件",
|
|
"基础应用、模组框架与引导系统;不包含需要 Entities 的可选适配。",
|
|
new[]
|
|
{
|
|
ContextCore, ContextAppAdapter, ContextEventBusAdapter, AppCore,
|
|
Command, DataSaver, EventBus, Network, ModFramework, Tutorial,
|
|
CommandApp, CommandEventBus, CommandNetwork,
|
|
DataSaverApp, DataSaverEventBus, NetworkApp, NetworkEventBus,
|
|
StarterBasic
|
|
},
|
|
new[] { StarterBasic, ContextEventBusAdapter, ModFramework, Tutorial })
|
|
};
|
|
|
|
internal static IReadOnlyList<ShrinkSdkPackageEntry> DistinctInstallRoots(
|
|
IEnumerable<ShrinkSdkPackageEntry> packages) => packages
|
|
.GroupBy(entry => entry.PackageName)
|
|
.Select(group => group.First())
|
|
.ToArray();
|
|
|
|
private static ShrinkSdkPackageEntry Package(string displayName, string summary, string packageName,
|
|
string version, ShrinkSdkPackageLayer layer, bool requiresUniTask = false) =>
|
|
new(displayName, summary, packageName, version, layer, requiresUniTask);
|
|
}
|
|
}
|
|
#endif
|