feat(cordis): 完成阶段5配置与调试工具
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
"ShrinkApp.Starter.Basic.Runtime",
|
||||
"ShrinkApp.Core.Runtime",
|
||||
"ShrinkApp.Core.Editor",
|
||||
"ShrinkContext.AppAdapter.Runtime",
|
||||
"ShrinkDataSaver.Runtime",
|
||||
"ShrinkDataSaver.Integration.App",
|
||||
"UnityEngine.UI"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#if UNITY_EDITOR
|
||||
using ShrinkApp.Editor;
|
||||
using ShrinkContext.AppAdapter;
|
||||
using UnityEditor;
|
||||
using UnityEditor.SceneManagement;
|
||||
using UnityEngine;
|
||||
@@ -10,6 +11,8 @@ namespace ShrinkApp.Starter.Basic.Editor
|
||||
public static class ShrinkAppBasicStarterGenerator
|
||||
{
|
||||
private const string MenuPath = "ShrinkApp/Starter/生成 Basic Entry 场景";
|
||||
private const string CompositionMenuPath = "ShrinkApp/Starter/创建默认 Cordis Composition";
|
||||
private const string CompositionPath = "Assets/Resources/ShrinkAppComposition.asset";
|
||||
|
||||
[MenuItem(MenuPath)]
|
||||
public static void Generate()
|
||||
@@ -21,13 +24,34 @@ namespace ShrinkApp.Starter.Basic.Editor
|
||||
Debug.Log("[ShrinkApp.Starter.Basic] 已生成 Basic Entry 场景与配置。");
|
||||
}
|
||||
|
||||
[MenuItem(CompositionMenuPath)]
|
||||
public static void CreateDefaultCompositionAsset()
|
||||
{
|
||||
EnsureResourcesDirectory();
|
||||
var existing = AssetDatabase.LoadAssetAtPath<ShrinkAppCompositionProfile>(CompositionPath);
|
||||
if (existing != null)
|
||||
{
|
||||
Selection.activeObject = existing;
|
||||
return;
|
||||
}
|
||||
|
||||
// 修复脚本/asmdef 变更期间可能留下的无主 .asset,而不是在同一路径叠加创建。
|
||||
if (!string.IsNullOrEmpty(AssetDatabase.AssetPathToGUID(CompositionPath)))
|
||||
AssetDatabase.DeleteAsset(CompositionPath);
|
||||
|
||||
var composition = ScriptableObject.CreateInstance<ShrinkAppCompositionProfile>();
|
||||
composition.SetDocument(ShrinkAppBasicContextComposition.CreateDefaultDocument());
|
||||
AssetDatabase.CreateAsset(composition, CompositionPath);
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
Selection.activeObject = composition;
|
||||
}
|
||||
|
||||
private static void EnsureAssets()
|
||||
{
|
||||
ShrinkAppEditorMenu.CreateSettingsAsset();
|
||||
|
||||
const string resourcesDir = "Assets/Resources";
|
||||
if (!AssetDatabase.IsValidFolder(resourcesDir))
|
||||
AssetDatabase.CreateFolder("Assets", "Resources");
|
||||
EnsureResourcesDirectory();
|
||||
|
||||
const string dataSaverSettingsPath = "Assets/Resources/ShrinkDataSaverSettings.asset";
|
||||
if (AssetDatabase.LoadAssetAtPath<ScriptableObject>(dataSaverSettingsPath) == null)
|
||||
@@ -51,6 +75,15 @@ namespace ShrinkApp.Starter.Basic.Editor
|
||||
starterAsset.maxCommandOutputLines = 12;
|
||||
AssetDatabase.CreateAsset(starterAsset, starterSettingsPath);
|
||||
}
|
||||
|
||||
CreateDefaultCompositionAsset();
|
||||
}
|
||||
|
||||
private static void EnsureResourcesDirectory()
|
||||
{
|
||||
const string resourcesDir = "Assets/Resources";
|
||||
if (!AssetDatabase.IsValidFolder(resourcesDir))
|
||||
AssetDatabase.CreateFolder("Assets", "Resources");
|
||||
}
|
||||
|
||||
private static void BuildScene()
|
||||
|
||||
@@ -9,10 +9,13 @@
|
||||
- 生成 `ShrinkAppSettings.asset`
|
||||
- 生成或补齐 `ShrinkDataSaverSettings.asset`
|
||||
- 生成 `ShrinkAppBasicStarterSettings.asset`
|
||||
- 生成 `ShrinkAppComposition.asset`(7 个默认 Cordis 条目;组件工厂仍由代码组合根提供)
|
||||
- 生成 `Assets/Scenes/ShrinkAppEntry.unity`
|
||||
- 生成最小示例 UI 与 `ShrinkAppBasicSampleController`
|
||||
- 演示 `ShrinkApp + ShrinkDataSaver + Command + Network` 的最小闭环
|
||||
|
||||
可以单独执行 `ShrinkApp/Starter/创建默认 Cordis Composition` 创建或修复组合资产,不需要重建场景。
|
||||
|
||||
当前示例场景内置的最小入口已经扩成一个小型调试台,包括:
|
||||
|
||||
- `Save Slot 0`
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#nullable enable
|
||||
|
||||
using System.Collections.Generic;
|
||||
using ShrinkCommand.Integration.App;
|
||||
using ShrinkCommand.Integration;
|
||||
using ShrinkContext.AppAdapter;
|
||||
@@ -17,6 +18,19 @@ namespace ShrinkApp.Starter.Basic
|
||||
/// </summary>
|
||||
public static class ShrinkAppBasicContextComposition
|
||||
{
|
||||
private static readonly string[] DefaultModuleIdValues =
|
||||
{
|
||||
"shrink.network",
|
||||
"shrink.command",
|
||||
"shrink.datasaver",
|
||||
"shrink.integration.command-network",
|
||||
"shrink.integration.command-eventbus",
|
||||
"shrink.integration.datasaver-eventbus",
|
||||
"shrink.integration.network-eventbus"
|
||||
};
|
||||
|
||||
public static IReadOnlyList<string> DefaultModuleIds => DefaultModuleIdValues;
|
||||
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||
private static void RegisterDefaultComposition()
|
||||
{
|
||||
@@ -40,5 +54,13 @@ namespace ShrinkApp.Starter.Basic
|
||||
host.AddModuleComponent("shrink.integration.network-eventbus",
|
||||
static () => new ShrinkNetworkEventBusComponent());
|
||||
}
|
||||
|
||||
public static ShrinkAppCompositionDocument CreateDefaultDocument()
|
||||
{
|
||||
var entries = new List<ShrinkAppCompositionEntry>(DefaultModuleIdValues.Length);
|
||||
foreach (var moduleId in DefaultModuleIdValues)
|
||||
entries.Add(new ShrinkAppCompositionEntry(moduleId));
|
||||
return new ShrinkAppCompositionDocument(includeUnlistedEntries: false, entries);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user