新Head
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user