This commit is contained in:
SoulliesOfficial
2026-06-09 01:43:55 -04:00
parent 0fb72f5bba
commit 5fc1392747
171 changed files with 30149 additions and 22331 deletions

View File

@@ -20,69 +20,63 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
#region [] Inspector Setup
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
base.SetUpInspector();
var container = inspector.GenerateContainer("Custom 2D Shape");
Inspector inspectorMain = EditorManager.instance.uiManager.inspector;
// 获取可选的主题包列表
themeBundleList = ThemeBundleManager.instance.loadedThemeBundleList.ConvertAll(x => x.themeBundleName);
// 排版布置
var selectionGroup = container.GenerateSubcontainer(3);
// 选择主题包列表
inspector.GenerateDropdown(this, selectionGroup, "Sprite Theme", themeBundleList, nameof(spriteThemeBundleName))
.AddListenerFunction(() => {
// 当切换主题包时,强制重置下面的物体名称列表,并刷新面板以装填新列表
spriteName = string.Empty;
inspectorMain.SetInspector(this);
});
InspectorBuilder.For(this)
.RawSection("Custom 2D Shape", 0, (insp, container) =>
{
var selectionGroup = container.GenerateSubcontainer(3);
// 如果选择主题包,则填充其 图片资源 列表
if (!string.IsNullOrEmpty(spriteThemeBundleName) && ThemeBundleManager.instance.TryGetThemeBundle(spriteThemeBundleName, out ThemeBundle themeBundle))
{
// 注意:由于资源加载规则,一些图片可能存在于 assetList_Other (Sprite 类型),另一些在 assetList_Texture (Texture2D 类型)
spriteNameList = new List<string>();
// 收集两个列表中的所有资源名称进行合并
var spriteNames = themeBundle.assetList_Other.FindAll(x => x is Sprite).ConvertAll(x => x.name);
var textureNames = themeBundle.assetList_Texture.ConvertAll(x => x.name);
spriteNameList.AddRange(spriteNames);
spriteNameList.AddRange(textureNames);
// 去重以防万一(有些包里同名资源可能存在多态)
spriteNameList = new List<string>(new HashSet<string>(spriteNameList));
inspector.GenerateDropdown(this, selectionGroup, "Sprite Name", spriteNameList, nameof(spriteName))
.AddListenerFunction(() => inspectorMain.SetInspector(this));
}
else
{
// 未选择或选择无效时,禁用下一级列表
var spriteDropdown = inspector.GenerateDropdown(this, selectionGroup, "Sprite Name", new List<string>(), nameof(spriteName));
spriteDropdown.dropdown.interactable = false;
}
// 选择主题包列表
insp.GenerateDropdown(this, selectionGroup, "Sprite Theme", themeBundleList, nameof(spriteThemeBundleName))
.AddListenerFunction(() =>
{
spriteName = string.Empty;
inspectorMain.SetInspector(this);
});
// 确认并应用按钮
var applyButton = inspector.GenerateButton(this, selectionGroup, "Apply Sprite", () =>
{
UpdateSprite();
Refresh();
});
// 如果选择了主题包,则填充其图片资源列表
if (!string.IsNullOrEmpty(spriteThemeBundleName) &&
ThemeBundleManager.instance.TryGetThemeBundle(spriteThemeBundleName, out ThemeBundle themeBundle))
{
spriteNameList = new List<string>();
// 如果没有选好,则不给确认
if (string.IsNullOrEmpty(spriteThemeBundleName) || string.IsNullOrEmpty(spriteName))
{
applyButton.button.interactable = false;
}
var spriteNames = themeBundle.assetList_Other.FindAll(x => x is Sprite).ConvertAll(x => x.name);
var textureNames = themeBundle.assetList_Texture.ConvertAll(x => x.name);
// 最后把通用的 Transform 和 颜色面板附加上去
var settings = container.GenerateSubcontainer(3);
StandardInspectionElement.GenerateForTransform(this, container);
spriteNameList.AddRange(spriteNames);
spriteNameList.AddRange(textureNames);
spriteNameList = new List<string>(new HashSet<string>(spriteNameList));
insp.GenerateDropdown(this, selectionGroup, "Sprite Name", spriteNameList, nameof(spriteName))
.AddListenerFunction(() => inspectorMain.SetInspector(this));
}
else
{
var spriteDropdown = insp.GenerateDropdown(this, selectionGroup, "Sprite Name", new List<string>(), nameof(spriteName));
spriteDropdown.dropdown.interactable = false;
}
// 确认并应用按钮
var applyButton = insp.GenerateButton(this, selectionGroup, "Apply Sprite", () =>
{
UpdateSprite();
Refresh();
});
if (string.IsNullOrEmpty(spriteThemeBundleName) || string.IsNullOrEmpty(spriteName))
{
applyButton.button.interactable = false;
}
})
.Section("Custom 2D Shape Transformation")
.Preset(InspectorBuilder.TransformPreset)
.Build();
}
#endregion
}

View File

@@ -54,14 +54,14 @@ namespace Ichni.RhythmGame
public override void SetUpInspector()
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Environment Object");
var shadowSettings = container.GenerateSubcontainer(3);
var i = inspector.GenerateInputField(this, shadowSettings, "Shadow Threshold (-1 to 1)", nameof(shadowThreshold));
var j = inspector.GenerateInputField(this, shadowSettings, "Shadow Smoothness (0 to 1)", nameof(shadowSmoothness));
var u = inspector.GenerateToggle(this, shadowSettings, "Use World Light", nameof(useWorldLight));
var shadowSettings2 = container.GenerateSubcontainer(1);
var w = inspector.GenerateVector3InputField(this, shadowSettings2, "Fake Light Direction", nameof(fakeLightDir));
InspectorBuilder.For(this)
.Section("Basic Environment Object")
.InputField(nameof(shadowThreshold), "Shadow Threshold (-1 to 1)")
.InputField(nameof(shadowSmoothness), "Shadow Smoothness (0 to 1)")
.Toggle(nameof(useWorldLight), "Use World Light")
.Vector3Field(nameof(fakeLightDir), "Fake Light Direction")
.Build();
}
public override void SaveBM()

View File

@@ -49,15 +49,13 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Directional Light");
var objectSettings = container.GenerateSubcontainer(3);
var intensityField =
inspector.GenerateInputField(this, objectSettings, "Intensity", nameof(intensity))
.AddListenerFunction(Refresh);
var castShadowsToggle =
inspector.GenerateToggle(this, objectSettings, "Cast Shadows", nameof(castShadows))
.AddListenerFunction(Refresh);
InspectorBuilder.For(this)
.Section("Directional Light")
.InputField(nameof(intensity), "Intensity")
.OnChanged(Refresh)
.Toggle(nameof(castShadows), "Cast Shadows")
.OnChanged(Refresh)
.Build();
}
}

View File

@@ -52,18 +52,12 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Directional Light");
var objectSettings = container.GenerateSubcontainer(3);
var intensityField =
inspector.GenerateInputField(this, objectSettings, "Intensity", nameof(intensity))
.AddListenerFunction(Refresh);
var rangeField =
inspector.GenerateInputField(this, objectSettings, "Range", nameof(range))
.AddListenerFunction(Refresh);
var castShadowsToggle =
inspector.GenerateToggle(this, objectSettings, "Cast Shadows", nameof(castShadows))
.AddListenerFunction(Refresh);
InspectorBuilder.For(this)
.Section("Point Light")
.InputField(nameof(intensity), "Intensity").OnChanged(Refresh)
.InputField(nameof(range), "Range").OnChanged(Refresh)
.Toggle(nameof(castShadows), "Cast Shadows").OnChanged(Refresh)
.Build();
}
}

View File

@@ -54,10 +54,10 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Bad Shrink");
var subcontainer = container.GenerateSubcontainer(3);
var effectTimeField = inspector.GenerateInputField(this, subcontainer, "Effect Time", nameof(effectTime));
InspectorBuilder.For(this)
.Section("Basic Note Bad Shrink")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
}

View File

@@ -57,11 +57,11 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Generate Expand");
var subcontainer = container.GenerateSubcontainer(3);
var generateTimeField = inspector.GenerateInputField(this, subcontainer, "Generate Time", nameof(generateTime));
var effectTimeField = inspector.GenerateInputField(this, subcontainer, "Effect Time", nameof(effectTime));
InspectorBuilder.For(this)
.Section("Basic Note Generate Expand")
.InputField(nameof(generateTime), "Generate Time")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
}

View File

@@ -56,10 +56,10 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Good Burst");
var subcontainer = container.GenerateSubcontainer(3);
var effectTimeField = inspector.GenerateInputField(this, subcontainer, "Effect Time", nameof(effectTime));
InspectorBuilder.For(this)
.Section("Basic Note Good Burst")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
}

View File

@@ -40,10 +40,10 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Holding Expand");
var subcontainer = container.GenerateSubcontainer(3);
var holdingTimeText = inspector.GenerateHintText(this, subcontainer, () => $"Holding Time: {GetHoldingTime()}");
InspectorBuilder.For(this)
.Section("Basic Note Holding Expand")
.HintText(() => $"Holding Time: {GetHoldingTime()}")
.Build();
}
}

View File

@@ -54,10 +54,10 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Miss Pale");
var subcontainer = container.GenerateSubcontainer(3);
var effectTimeField = inspector.GenerateInputField(this, subcontainer, "Effect Time", nameof(effectTime));
InspectorBuilder.For(this)
.Section("Basic Note Miss Pale")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
}

View File

@@ -56,10 +56,10 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Perfect Burst");
var subcontainer = container.GenerateSubcontainer(3);
var effectTimeField = inspector.GenerateInputField(this, subcontainer, "Effect Time", nameof(effectTime));
InspectorBuilder.For(this)
.Section("Basic Note Perfect Burst")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
}