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();
}
}

View File

@@ -22,52 +22,31 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public override void SetUpInspector()
{
// base.SetUpInspector() 会自动生成 ColorSubmodule 的 UIBaseColor + EmissionColor
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
// ── 星座核心参数 ──────────────────────────────────────────────
var mainContainer = inspector.GenerateContainer("DTMConstellation");
var mainSettings = mainContainer.GenerateSubcontainer(3);
inspector.GenerateInputField(this, mainSettings, "Max Particles", nameof(maxParticles));
inspector.GenerateInputField(this, mainSettings, "Max Line Count", nameof(maxLineCount));
inspector.GenerateInputField(this, mainSettings, "Max Connections Per Star", nameof(maxConnectionsPerStar));
inspector.GenerateInputField(this, mainSettings, "Max Connection Distance", nameof(maxConnectionDistance));
// ── 散布体积 ──────────────────────────────────────────────────
var spreadContainer = inspector.GenerateContainer("Spread Volume");
var spreadSettings = spreadContainer.GenerateSubcontainer(1);
inspector.GenerateVector3InputField(this, spreadSettings, "Spread Size", nameof(spreadSize));
// ── 视觉参数 ─────────────────────────────────────────────────
var visualContainer = inspector.GenerateContainer("Visual");
var visualSettings = visualContainer.GenerateSubcontainer(3);
inspector.GenerateInputField(this, visualSettings, "Active Star Size", nameof(activeStarSize));
inspector.GenerateInputField(this, visualSettings, "Line Width", nameof(lineWidth));
// ── 粒子运动 ─────────────────────────────────────────────────
var motionContainer = inspector.GenerateContainer("Particle Motion");
var motionSettings = motionContainer.GenerateSubcontainer(1);
inspector.GenerateVector3InputField(this, motionSettings, "Orbital Velocity", nameof(orbitalVelocity));
inspector.GenerateInputField(this, motionSettings, "Angular Velocity", nameof(angularVelocity));
// ── 刷新操作按钮 ──────────────────────────────────────────────
var actionContainer = inspector.GenerateContainer("Constellation Actions");
var actionSettings = actionContainer.GenerateSubcontainer(2);
inspector.GenerateButton(this, actionSettings, "Refresh This", () =>
{
GenerateSingleConstellation();
});
inspector.GenerateButton(this, actionSettings, "Refresh All", () =>
{
var allConstellations = FindObjectsByType<DTMConstellation>(FindObjectsSortMode.None);
foreach (var c in allConstellations)
c.GenerateSingleConstellation();
});
InspectorBuilder.For(this)
.Section("DTMConstellation")
.InputField(nameof(maxParticles), "Max Particles")
.InputField(nameof(maxLineCount), "Max Line Count")
.InputField(nameof(maxConnectionsPerStar), "Max Connections Per Star")
.InputField(nameof(maxConnectionDistance), "Max Connection Distance")
.Section("Spread Volume")
.Vector3Field(nameof(spreadSize), "Spread Size")
.Section("Visual")
.InputField(nameof(activeStarSize), "Active Star Size")
.InputField(nameof(lineWidth), "Line Width")
.Section("Particle Motion")
.Vector3Field(nameof(orbitalVelocity), "Orbital Velocity")
.InputField(nameof(angularVelocity), "Angular Velocity")
.Section("Constellation Actions")
.Button("Refresh This", GenerateSingleConstellation)
.Button("Refresh All", () =>
{
var allConstellations = FindObjectsByType<DTMConstellation>(FindObjectsSortMode.None);
foreach (var c in allConstellations)
c.GenerateSingleConstellation();
})
.Build();
}
#endregion
}

View File

@@ -24,28 +24,19 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTMGlobalFog");
var subcontainer = container.GenerateSubcontainer(2);
inspector.GenerateSlider(this, subcontainer, "Fog Intensity", nameof(fogIntensity), min: 0, max: 5).AddListenerFunction(UpdateFogProperties);
var colorStartContainer = container.GenerateSubcontainer(1, 240);
inspector.GenerateEmissionColorPicker(this, colorStartContainer, "Fog Color Start", "NULL", nameof(fogColorStart), nameof(fogColorStartIntensity))
.AddListenerFunction(UpdateFogProperties);
var colorEndContainer = container.GenerateSubcontainer(1, 240);
inspector.GenerateEmissionColorPicker(this, colorEndContainer, "Fog Color End", "NULL", nameof(fogColorEnd), nameof(fogColorEndIntensity))
.AddListenerFunction(UpdateFogProperties);
inspector.GenerateSlider(this, subcontainer, "Fog Color Duo", nameof(fogColorDuo), min: 0, max: 1).AddListenerFunction(UpdateFogProperties);
inspector.GenerateSlider(this, subcontainer, "Skybox Fog Intensity", nameof(skyboxFogIntensity), min: 0, max: 5).AddListenerFunction(UpdateFogProperties);
inspector.GenerateSlider(this, subcontainer, "Skybox Fog Height", nameof(skyboxFogHeight), min: 0, max: 10).AddListenerFunction(UpdateFogProperties);
inspector.GenerateSlider(this, subcontainer, "Skybox Fog Falloff", nameof(skyboxFogFalloff), min: 0, max: 10).AddListenerFunction(UpdateFogProperties);
inspector.GenerateSlider(this, subcontainer, "Skybox Fog Offset", nameof(skyboxFogOffset), min: -10, max: 10).AddListenerFunction(UpdateFogProperties);
inspector.GenerateSlider(this, subcontainer, "Skybox Fog Bottom", nameof(skyboxFogBottom), min: -10, max: 10).AddListenerFunction(UpdateFogProperties);
inspector.GenerateSlider(this, subcontainer, "Skybox Fog Fill", nameof(skyboxFogFill), min: 0, max: 5).AddListenerFunction(UpdateFogProperties);
InspectorBuilder.For(this)
.Section("DTMGlobalFog")
.Slider(nameof(fogIntensity), 0, 5, "Fog Intensity").OnChanged(UpdateFogProperties)
.EmissionColorPicker(nameof(fogColorStart), "NULL", nameof(fogColorStartIntensity), "Fog Color Start").OnChanged(UpdateFogProperties)
.EmissionColorPicker(nameof(fogColorEnd), "NULL", nameof(fogColorEndIntensity), "Fog Color End").OnChanged(UpdateFogProperties)
.Slider(nameof(fogColorDuo), 0, 1, "Fog Color Duo").OnChanged(UpdateFogProperties)
.Slider(nameof(skyboxFogIntensity), 0, 5, "Skybox Fog Intensity").OnChanged(UpdateFogProperties)
.Slider(nameof(skyboxFogHeight), 0, 10, "Skybox Fog Height").OnChanged(UpdateFogProperties)
.Slider(nameof(skyboxFogFalloff), 0, 10, "Skybox Fog Falloff").OnChanged(UpdateFogProperties)
.Slider(nameof(skyboxFogOffset), -10, 10, "Skybox Fog Offset").OnChanged(UpdateFogProperties)
.Slider(nameof(skyboxFogBottom), -10, 10, "Skybox Fog Bottom").OnChanged(UpdateFogProperties)
.Slider(nameof(skyboxFogFill), 0, 5, "Skybox Fog Fill").OnChanged(UpdateFogProperties)
.Build();
}
#endregion
}

View File

@@ -21,28 +21,21 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTMFramesFloor");
var subcontainer = container.GenerateSubcontainer(3);
inspector.GenerateSlider(this, subcontainer, "Pattern Size X", nameof(patternSizeX), min: 1, max: 500).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Pattern Size Y", nameof(patternSizeY), min: 1, max: 500).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Grid Density", nameof(gridDensity), min: 0.1f, max: 10).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Time Angle", nameof(timeAngle), min: 0, max: 1).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Step A", nameof(stepA), min: 0, max: 1).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Step B", nameof(stepB), min: 0, max: 1).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Base Speed", nameof(baseSpeed), min: 0, max: 10).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateToggle(this, subcontainer, "Enable Outer Border", nameof(enableOuterBorder)).AddListenerFunction(UpdateMaterialProperties);
var colorContainer = container.GenerateSubcontainer(1, 280f);
inspector.GenerateBaseColorPicker(this, colorContainer, "Outer Border Color", nameof(outerBorderColor)).AddListenerFunction(UpdateMaterialProperties);
var subcontainer2 = container.GenerateSubcontainer(3);
inspector.GenerateSlider(this, subcontainer2, "Outer Border Width", nameof(outerBorderWidth), min: 0, max: 0.5f).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer2, "Fade Far", nameof(fadeFar), min: 1, max: 500).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer2, "Fade Near", nameof(fadeNear), min: 0, max: 200).AddListenerFunction(UpdateMaterialProperties);
InspectorBuilder.For(this)
.Section("DTMFramesFloor")
.Slider(nameof(patternSizeX), 1, 500, "Pattern Size X").OnChanged(UpdateMaterialProperties)
.Slider(nameof(patternSizeY), 1, 500, "Pattern Size Y").OnChanged(UpdateMaterialProperties)
.Slider(nameof(gridDensity), 0.1f, 10, "Grid Density").OnChanged(UpdateMaterialProperties)
.Slider(nameof(timeAngle), 0, 1, "Time Angle").OnChanged(UpdateMaterialProperties)
.Slider(nameof(stepA), 0, 1, "Step A").OnChanged(UpdateMaterialProperties)
.Slider(nameof(stepB), 0, 1, "Step B").OnChanged(UpdateMaterialProperties)
.Slider(nameof(baseSpeed), 0, 10, "Base Speed").OnChanged(UpdateMaterialProperties)
.Toggle(nameof(enableOuterBorder), "Enable Outer Border").OnChanged(UpdateMaterialProperties)
.ColorPicker(nameof(outerBorderColor), "Outer Border Color").OnChanged(UpdateMaterialProperties)
.Slider(nameof(outerBorderWidth), 0, 0.5f, "Outer Border Width").OnChanged(UpdateMaterialProperties)
.Slider(nameof(fadeFar), 1, 500, "Fade Far").OnChanged(UpdateMaterialProperties)
.Slider(nameof(fadeNear), 0, 200, "Fade Near").OnChanged(UpdateMaterialProperties)
.Build();
}
#endregion
}

View File

@@ -21,25 +21,22 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTMRandomGridTube");
var subcontainer = container.GenerateSubcontainer(2);
inspector.GenerateSlider(this, subcontainer, "Pattern Size X", nameof(patternSizeX), min: 0, max: 20).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Pattern Size Y", nameof(patternSizeY), min: 0, max: 20).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Grid Density", nameof(gridDensity), min: 0, max: 10).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Time Angle", nameof(timeAngle), min: 0, max: 6.28f).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Step A", nameof(stepA), min: 0, max: 1).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Step B", nameof(stepB), min: 0, max: 1).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Base Speed", nameof(baseSpeed), min: 0, max: 3).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Seam Rotation", nameof(seamRotation), min: -180, max: 180).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Seam Fade Width", nameof(seamFadeWidth), min: 0, max: 5).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Seam Fade Smoothness", nameof(seamFadeSmoothness), min: 0, max: 5).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Fade Far", nameof(fadeFar), min: 0, max: 500).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Fade Near", nameof(fadeNear), min: 0, max: 100).AddListenerFunction(UpdateMaterialProperties);
inspector.GenerateSlider(this, subcontainer, "Tube Radius", nameof(tubeRadius), min: 0, max: 50).AddListenerFunction(UpdateMaterialProperties);
InspectorBuilder.For(this)
.Section("DTMRandomGridTube")
.Slider(nameof(patternSizeX), 0, 20, "Pattern Size X").OnChanged(UpdateMaterialProperties)
.Slider(nameof(patternSizeY), 0, 20, "Pattern Size Y").OnChanged(UpdateMaterialProperties)
.Slider(nameof(gridDensity), 0, 10, "Grid Density").OnChanged(UpdateMaterialProperties)
.Slider(nameof(timeAngle), 0, 6.28f, "Time Angle").OnChanged(UpdateMaterialProperties)
.Slider(nameof(stepA), 0, 1, "Step A").OnChanged(UpdateMaterialProperties)
.Slider(nameof(stepB), 0, 1, "Step B").OnChanged(UpdateMaterialProperties)
.Slider(nameof(baseSpeed), 0, 3, "Base Speed").OnChanged(UpdateMaterialProperties)
.Slider(nameof(seamRotation), -180, 180, "Seam Rotation").OnChanged(UpdateMaterialProperties)
.Slider(nameof(seamFadeWidth), 0, 5, "Seam Fade Width").OnChanged(UpdateMaterialProperties)
.Slider(nameof(seamFadeSmoothness), 0, 5, "Seam Fade Smoothness").OnChanged(UpdateMaterialProperties)
.Slider(nameof(fadeFar), 0, 500, "Fade Far").OnChanged(UpdateMaterialProperties)
.Slider(nameof(fadeNear), 0, 100, "Fade Near").OnChanged(UpdateMaterialProperties)
.Slider(nameof(tubeRadius), 0, 50, "Tube Radius").OnChanged(UpdateMaterialProperties)
.Build();
}
#endregion
}

View File

@@ -33,8 +33,49 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
public override void SetUpInspector()
{
base.SetUpInspector();
// 让强劲的特性打包流去替接管全部 20 几个杂毛元素生成,并自动分装成横列!
Ichni.Editor.DynamicUIAutoBuilder.AutoBuild(this, EditorManager.instance.uiManager.inspector);
InspectorBuilder.For(this)
.Section("DTMStarrySkybox - Sky")
.ColorPicker(nameof(skyColor), "Sky Color")
.ColorPicker(nameof(horizon), "Horizon")
.Slider(nameof(horizonStrength), 0, 5, "Horizon Strength")
.Span(2)
.Slider(nameof(horizonSkyHeight), 0, 2, "Horizon Sky Height")
.Span(2)
.Section("DTMStarrySkybox - Stars")
.Toggle(nameof(useStarMap), "Use Star Map")
.Slider(nameof(starDensity), 0, 200, "Star Density")
.Span(2)
.Slider(nameof(starSize), 0, 300, "Star Size")
.Span(2)
.ColorPicker(nameof(starColor), "Star Color")
.Toggle(nameof(preventStarsInFrontOfSun), "Prevent Stars In Front Of Sun")
.InputField(nameof(starMapTextureName), "Star Map Texture (Name)")
.Span(3)
.Section("DTMStarrySkybox - Sun")
.Toggle(nameof(haveSun), "Have Sun")
.InputField(nameof(sunMaskTextureName), "Sun Mask Texture (Name)")
.Span(3)
.Slider(nameof(sunMaskSize), 0, 0.2f, "Sun Mask Size")
.Span(2)
.Slider(nameof(sunMaskSpherize), 0, 30, "Sun Mask Spherize")
.Span(2)
.Slider(nameof(sunDiscSize), 0, 5, "Sun Disc Size")
.Span(2)
.ColorPicker(nameof(sunColorOne), "Sun Color One")
.ColorPicker(nameof(sunColorTwo), "Sun Color Two")
.Slider(nameof(sunGradientStrength), 0, 10, "Sun Gradient Strength")
.Span(2)
.Slider(nameof(sunGradientHeight), 0, 3, "Sun Gradient Height")
.Span(2)
.Section("DTMStarrySkybox - Fog")
.Slider(nameof(fogHeight), 0, 5, "Fog Height")
.Span(2)
.Slider(nameof(fogPower), 0, 1, "Fog Power")
.Span(2)
.Slider(nameof(fogContrast), 0, 200, "Fog Contrast")
.Span(2)
.Build();
}
#endregion
}

View File

@@ -17,58 +17,37 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
{
base.SetUpInspector();
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTMTrail");
var subcontainer = container.GenerateSubcontainer(3);
IHaveInspection insp = EditorManager.instance.uiManager.inspector;
var visibleTimeLengthButton = inspector.GenerateButton(this, subcontainer, "Visible Time Length", () =>
{
var ew = inspector.GenerateCompositeParameterWindow(
this, "Visible Time Length", nameof(visibleTimeLength));
ew.SetAsFlexibleFloat();
});
var enableTimeListButton = inspector.GenerateButton(this, subcontainer, "Enable Head Time List", () =>
{
var ew = inspector.GenerateCompositeParameterWindow(
this, "Enable Head Time List", nameof(enableTimes));
ew.SetAsFlexibleBool();
});
var headRotateSpeedButton = inspector.GenerateButton(this, subcontainer, "Head Rotate Speed", () =>
{
var ew = inspector.GenerateCompositeParameterWindow(
this, "Head Rotate Speed", nameof(headRotateSpeed));
ew.SetAsFlexibleFloat();
});
var enableProcessTimeSlider =
inspector.GenerateSlider(this, subcontainer, "Enable Process Time", nameof(enableProcessTime), min: 0, max: 3);
var headSizeSlider =
inspector.GenerateSlider(this, subcontainer, "Head Size", nameof(headSize), min: 0, max: 10);
var curveSettings = container.GenerateSubcontainer(3);
var widthCurveButton = inspector.GenerateButton(this, curveSettings, "Width Curve", () =>
{
var window = inspector.GenerateCompositeParameterWindow(this, "Width Curve", nameof(widthCurve));
window.SetAsCustomCurve();
window.closeButton.onClick.AddListener(() => trailRenderer.widthCurve = widthCurve);
});
var colorSettings = container.GenerateSubcontainer(3);
var gradientColorKeysButton = inspector.GenerateButton(this, colorSettings, "Gradient Color Keys", () =>
{
var gradientWindow = inspector.GenerateCompositeParameterWindow(this, "Gradient Color Keys", nameof(trailAlphaGradient));
gradientWindow.SetAsGradientColorKeys();
gradientWindow.closeButton.onClick.AddListener(() => trailRenderer.colorGradient = trailAlphaGradient);
});
var gradientAlphaKeysButton = inspector.GenerateButton(this, colorSettings, "Gradient Alpha Keys", () =>
{
var gradientWindow = inspector.GenerateCompositeParameterWindow(this, "Gradient Alpha Keys", nameof(trailAlphaGradient));
gradientWindow.SetAsGradientAlphaKeys();
gradientWindow.closeButton.onClick.AddListener(() => trailRenderer.colorGradient = trailAlphaGradient);
});
InspectorBuilder.For(this)
.Section("DTMTrail")
.Button("Visible Time Length", () =>
insp.GenerateCompositeParameterWindow(this, "Visible Time Length", nameof(visibleTimeLength)).SetAsFlexibleFloat())
.Button("Enable Head Time List", () =>
insp.GenerateCompositeParameterWindow(this, "Enable Head Time List", nameof(enableTimes)).SetAsFlexibleBool())
.Button("Head Rotate Speed", () =>
insp.GenerateCompositeParameterWindow(this, "Head Rotate Speed", nameof(headRotateSpeed)).SetAsFlexibleFloat())
.Slider(nameof(enableProcessTime), 0, 3, "Enable Process Time")
.Slider(nameof(headSize), 0, 10, "Head Size")
.Button("Width Curve", () =>
{
var window = insp.GenerateCompositeParameterWindow(this, "Width Curve", nameof(widthCurve));
window.SetAsCustomCurve();
window.closeButton.onClick.AddListener(() => trailRenderer.widthCurve = widthCurve);
})
.Button("Gradient Color Keys", () =>
{
var gradientWindow = insp.GenerateCompositeParameterWindow(this, "Gradient Color Keys", nameof(trailAlphaGradient));
gradientWindow.SetAsGradientColorKeys();
gradientWindow.closeButton.onClick.AddListener(() => trailRenderer.colorGradient = trailAlphaGradient);
})
.Button("Gradient Alpha Keys", () =>
{
var gradientWindow = insp.GenerateCompositeParameterWindow(this, "Gradient Alpha Keys", nameof(trailAlphaGradient));
gradientWindow.SetAsGradientAlphaKeys();
gradientWindow.closeButton.onClick.AddListener(() => trailRenderer.colorGradient = trailAlphaGradient);
})
.Build();
}
#endregion
}

View File

@@ -7,8 +7,10 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM Note Bad Burst");
InspectorBuilder.For(this)
.Section("DTM Note Bad Burst")
.HintText("No configurable parameters")
.Build();
}
#endregion
}

View File

@@ -7,11 +7,11 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM 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("DTM Note Generate Expand")
.InputField(nameof(generateTime), "Generate Time")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
#endregion
}

View File

@@ -7,11 +7,11 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM 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("DTM Note Generate Extend")
.InputField(nameof(generateTime), "Generate Time")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
#endregion
}

View File

@@ -7,8 +7,10 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM Note Good Burst");
InspectorBuilder.For(this)
.Section("DTM Note Good Burst")
.HintText("No configurable parameters")
.Build();
}
#endregion
}

View File

@@ -7,9 +7,10 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Holding Expand");
var subcontainer = container.GenerateSubcontainer(3);
InspectorBuilder.For(this)
.Section("DTM Note Holding Breath")
.HintText("No configurable parameters")
.Build();
}
#endregion
}

View File

@@ -7,10 +7,10 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM Note Miss Transparent");
var subcontainer = container.GenerateSubcontainer(3);
var effectTimeField = inspector.GenerateInputField(this, subcontainer, "Effect Time", nameof(effectTime));
InspectorBuilder.For(this)
.Section("DTM Note Miss Transparent")
.InputField(nameof(effectTime), "Effect Time")
.Build();
}
#endregion
}

View File

@@ -7,8 +7,10 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM Note Perfect Burst");
InspectorBuilder.For(this)
.Section("DTM Note Perfect Burst")
.HintText("No configurable parameters")
.Build();
}
#endregion
}

View File

@@ -7,16 +7,15 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
#region [Editor] Inspection
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("DTM Ripple Effect");
var effectSettings1 = container.GenerateSubcontainer(3);
var rippleTimeInputField = inspector.GenerateInputField(this, effectSettings1, "Ripple Time", nameof(rippleTime));
var effectSettings2 = container.GenerateSubcontainer(1);
var emissionColorPicker = inspector.GenerateEmissionColorPicker(this, effectSettings2, "Color", "NULL", nameof(emissionColor), nameof(emissionIntensity));
var positionOffsetInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Position Offset", nameof(positionOffset));
var eulerAnglesInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Euler Angles", nameof(eulerAnglesOffset));
var scaleInputField = inspector.GenerateVector3InputField(this, effectSettings2, "Scale", nameof(scale));
SetRemove(effectSettings2);
InspectorBuilder.For(this)
.Section("DTM Ripple Effect")
.InputField(nameof(rippleTime), "Ripple Time")
.EmissionColorPicker(nameof(emissionColor), "NULL", nameof(emissionIntensity), "Color")
.Vector3Field(nameof(positionOffset), "Position Offset")
.Vector3Field(nameof(eulerAnglesOffset), "Euler Angles")
.Vector3Field(nameof(scale), "Scale")
.Button("Remove", () => { nowEffectState = EffectState.Before; AccommodatingList.Remove(this); EditorManager.instance.uiManager.inspector.SetInspector(attachedGameElement); })
.Build();
}
#endregion
}

View File

@@ -17,55 +17,33 @@ namespace Ichni.RhythmGame.ThemeBundles.DepartureToMultiverse
[NonSerialized] public Material skyboxMaterial;
// --- Sky ---
[Ichni.Editor.DynamicUIEmissionColor("Sky Color", Group = "DTMStarrySkybox - Sky")]
public Color skyColor = Color.blue;
[Ichni.Editor.DynamicUIEmissionColor("Horizon", Group = "DTMStarrySkybox - Sky")]
public Color horizon = Color.cyan;
[Ichni.Editor.DynamicUISlider("Horizon Strength", Group = "DTMStarrySkybox - Sky", Span = 2, Min = 0, Max = 5)]
public float horizonStrength = 2f;
[Ichni.Editor.DynamicUISlider("Horizon Sky Height", Group = "DTMStarrySkybox - Sky", Span = 2, Min = 0, Max = 2)]
public float horizonSkyHeight = 0.7f;
// --- Stars ---
[Ichni.Editor.DynamicUI("Use Star Map", Group = "DTMStarrySkybox - Stars")]
public bool useStarMap = true;
[Ichni.Editor.DynamicUISlider("Star Density", Group = "DTMStarrySkybox - Stars", Span = 2, Min = 0, Max = 200)]
public float starDensity = 30f;
[Ichni.Editor.DynamicUISlider("Star Size", Group = "DTMStarrySkybox - Stars", Span = 2, Min = 0, Max = 300)]
public float starSize = 75f;
[Ichni.Editor.DynamicUIEmissionColor("Star Color", Group = "DTMStarrySkybox - Stars")]
public Color starColor = Color.white;
[Ichni.Editor.DynamicUI("Prevent Stars In Front Of Sun", Group = "DTMStarrySkybox - Stars")]
public bool preventStarsInFrontOfSun = true;
[Ichni.Editor.DynamicUI("Star Map Texture (Name)", Group = "DTMStarrySkybox - Stars", Span = 3)]
public string starMapTextureName = "None"; // 较长文本强行占满全行
public string starMapTextureName = "None";
// --- Sun Mask ---
[Ichni.Editor.DynamicUI("Have Sun", Group = "DTMStarrySkybox - Sun")]
public bool haveSun = false;
[Ichni.Editor.DynamicUI("Sun Mask Texture (Name)", Group = "DTMStarrySkybox - Sun", Span = 3)]
public string sunMaskTextureName = "None";
[Ichni.Editor.DynamicUISlider("Sun Mask Size", Group = "DTMStarrySkybox - Sun", Span = 2, Min = 0, Max = 0.2f)]
public float sunMaskSize = 0.02f;
[Ichni.Editor.DynamicUISlider("Sun Mask Spherize", Group = "DTMStarrySkybox - Sun", Span = 2, Min = 0, Max = 30)]
public float sunMaskSpherize = 13.2f;
[Ichni.Editor.DynamicUISlider("Sun Disc Size", Group = "DTMStarrySkybox - Sun", Span = 2, Min = 0, Max = 5)]
public float sunDiscSize = 1f;
[Ichni.Editor.DynamicUIEmissionColor("Sun Color One", Group = "DTMStarrySkybox - Sun")]
public Color sunColorOne = Color.white;
[Ichni.Editor.DynamicUIEmissionColor("Sun Color Two", Group = "DTMStarrySkybox - Sun")]
public Color sunColorTwo = Color.white;
[Ichni.Editor.DynamicUISlider("Sun Gradient Strength", Group = "DTMStarrySkybox - Sun", Span = 2, Min = 0, Max = 10)]
public float sunGradientStrength = 3.7f;
[Ichni.Editor.DynamicUISlider("Sun Gradient Height", Group = "DTMStarrySkybox - Sun", Span = 2, Min = 0, Max = 3)]
public float sunGradientHeight = 1.23f;
// --- Fog ---
[Ichni.Editor.DynamicUISlider("Fog Height", Group = "DTMStarrySkybox - Fog", Span = 2, Min = 0, Max = 5)]
public float fogHeight = 1f;
[Ichni.Editor.DynamicUISlider("Fog Power", Group = "DTMStarrySkybox - Fog", Span = 2, Min = 0, Max = 1)]
public float fogPower = 0.5f;
[Ichni.Editor.DynamicUISlider("Fog Contrast", Group = "DTMStarrySkybox - Fog", Span = 2, Min = 0, Max = 200)]
public float fogContrast = 40f;
#endregion

View File

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

View File

@@ -55,9 +55,10 @@ namespace Ichni.RhythmGame.ThemeBundles.MetropolisOnOrbit
public override void SetUpInspector()
{
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
var container = inspector.GenerateContainer("Basic Note Perfect Burst");
//var subcontainer = container.GenerateSubcontainer(3);
InspectorBuilder.For(this)
.Section("MOO Note Perfect Animation")
.HintText("No configurable parameters")
.Build();
}
}