所有Simple UI Element,以及Composite Parameter Window初步

This commit is contained in:
SoulliesOfficial
2025-02-13 02:04:41 -05:00
parent 8d03acc3cb
commit 96a4d620f5
65 changed files with 10696 additions and 75 deletions

View File

@@ -0,0 +1,44 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class DynamicUIBaseColorPicker : DynamicUIElement
{
public TMP_InputField inputFieldBaseR;
public TMP_InputField inputFieldBaseG;
public TMP_InputField inputFieldBaseB;
public TMP_InputField inputFieldBaseA;
public Image colorPreview;
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
Color baseColor = (Color)connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement); //获取对应变量的值
inputFieldBaseR.text = baseColor.r.ToString();
inputFieldBaseG.text = baseColor.g.ToString();
inputFieldBaseB.text = baseColor.b.ToString();
inputFieldBaseA.text = baseColor.a.ToString();
inputFieldBaseR.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldBaseG.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldBaseB.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldBaseA.onEndEdit.AddListener(_ => ApplyParameters());
colorPreview.color = baseColor;
}
private void ApplyParameters()
{
Color newValue = new Color(float.Parse(inputFieldBaseR.text), float.Parse(inputFieldBaseG.text),
float.Parse(inputFieldBaseB.text), float.Parse(inputFieldBaseA.text));
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newValue);
colorPreview.color = newValue;
connectedBaseElement.Refresh();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9f5915d0f462947f5bec62ea7e118953
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,28 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class DynamicUIButton : DynamicUIElement
{
public Button button;
public TMP_Text buttonText;
public void SetText(string buttonText, bool hasTitle)
{
this.buttonText.text = buttonText;
if(!hasTitle) title.gameObject.SetActive(false);
}
public void ApplyFunction(UnityAction function)
{
button.onClick.AddListener(function);
button.onClick.AddListener(connectedBaseElement.Refresh);
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bc123b9138432416184ac4c89b248852
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
namespace Ichni.Editor
{
public class DynamicUIDropdown : DynamicUIElement
{
public TMP_Dropdown dropdown;
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
dropdown.value = (int)connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement); //获取对应变量的值
dropdown.onValueChanged.AddListener(ApplyParameters);
}
public void SetUpEnum(Type enumType)
{
dropdown.options.Clear();
List<string> enumNameList = System.Enum.GetNames(enumType).ToList();
dropdown.AddOptions(enumNameList);
}
private void ApplyParameters(int value)
{
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, value);
connectedBaseElement.Refresh();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 264384f5bd48a41acb9b80fac4ed4544
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,33 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
namespace Ichni.Editor
{
public abstract class DynamicUIElement : MonoBehaviour
{
public TMP_Text title;
public IBaseElement connectedBaseElement;
/// <summary>
/// 参数名,通过反射获取饿修改对应变量的值
/// </summary>
public string parameterName;
/// <summary>
/// 是否始终更新如果子类可能用到此变量则在子类中写Update即可
/// </summary>
public bool isAlwaysUpdated;
public virtual void Initialize(IBaseElement baseElement, string title, string parameterName)
{
this.connectedBaseElement = baseElement;
this.parameterName = parameterName;
this.title.text = title;
}
//public abstract void ApplyParameters();
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ff19cfc4963444c2e8aa109adef5c68d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,62 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class DynamicUIEmissionColorPicker : DynamicUIElement
{
private string emissionEnabledName, colorParameterName, emissionIntensityName;
public Toggle toggleEnableEmission;
public TMP_InputField inputFieldEmissionR;
public TMP_InputField inputFieldEmissionG;
public TMP_InputField inputFieldEmissionB;
public TMP_InputField inputFieldEmissionI;
public Image colorPreview;
public new void Initialize(IBaseElement baseElement, string title,
string emissionEnabledName, string colorParameterName, string emissionIntensityName)
{
base.Initialize(baseElement, title, colorParameterName);
this.emissionEnabledName = emissionEnabledName;
this.colorParameterName = colorParameterName;
this.emissionIntensityName = emissionIntensityName;
bool enableEmission = (bool)connectedBaseElement.GetType().GetField(emissionEnabledName).GetValue(connectedBaseElement);
Color emissionColor = (Color)connectedBaseElement.GetType().GetField(colorParameterName).GetValue(connectedBaseElement);
float emissionIntensity = (float)connectedBaseElement.GetType().GetField(emissionIntensityName).GetValue(connectedBaseElement);
toggleEnableEmission.isOn = enableEmission;
inputFieldEmissionR.text = emissionColor.r.ToString();
inputFieldEmissionG.text = emissionColor.g.ToString();
inputFieldEmissionB.text = emissionColor.b.ToString();
inputFieldEmissionI.text = emissionIntensity.ToString();
toggleEnableEmission.onValueChanged.AddListener(_ => ApplyParameters());
inputFieldEmissionR.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldEmissionG.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldEmissionB.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldEmissionI.onEndEdit.AddListener(_ => ApplyParameters());
colorPreview.color = emissionColor;
}
private void ApplyParameters()
{
bool enableEmission = toggleEnableEmission.isOn;
Color emissionColor = new Color(float.Parse(inputFieldEmissionR.text), float.Parse(inputFieldEmissionG.text),
float.Parse(inputFieldEmissionB.text));
float emissionIntensity = float.Parse(inputFieldEmissionI.text);
connectedBaseElement.GetType().GetField(emissionEnabledName).SetValue(connectedBaseElement, enableEmission);
connectedBaseElement.GetType().GetField(colorParameterName).SetValue(connectedBaseElement, emissionColor);
connectedBaseElement.GetType().GetField(emissionIntensityName).SetValue(connectedBaseElement, emissionIntensity);
colorPreview.color = emissionColor;
connectedBaseElement.Refresh();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 836ab6bd424664b3cb74dd0fcb08c039
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
namespace Ichni.Editor
{
public class DynamicUIInputField : DynamicUIElement
{
public TMP_InputField inputField;
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
inputField.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString(); //获取对应变量的值
inputField.onEndEdit.AddListener(ApplyParameters);
}
private void ApplyParameters(string text)
{
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, text);
connectedBaseElement.Refresh();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3c820db94e3df4f9aa6ab10ef435bb5a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
namespace Ichni.Editor
{
public class DynamicUIText : DynamicUIElement
{
public TMP_Text text;
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
}
private void Update()
{
if (isAlwaysUpdated)
{
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bd156b66e112a4120a775c14113c0738
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,26 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class DynamicUIToggle : DynamicUIElement
{
public Toggle toggle;
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
toggle.isOn = (bool)connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement); //获取对应变量的值
toggle.onValueChanged.AddListener(ApplyParameters);
}
private void ApplyParameters(bool value)
{
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, value);
connectedBaseElement.Refresh();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dbe43137b87e24779be3757535fa9984
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,38 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using JetBrains.Annotations;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UIElements.Experimental;
namespace Ichni.Editor
{
public class DynamicUIVector3InputField : DynamicUIElement
{
public TMP_InputField inputFieldX;
public TMP_InputField inputFieldY;
public TMP_InputField inputFieldZ;
public override void Initialize(IBaseElement baseElement, string title, string parameterName)
{
base.Initialize(baseElement, title, parameterName);
Vector3 pos = (Vector3)connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement); //获取对应变量的值
inputFieldX.text = pos.x.ToString();
inputFieldY.text = pos.y.ToString();
inputFieldZ.text = pos.z.ToString();
inputFieldX.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldY.onEndEdit.AddListener(_ => ApplyParameters());
inputFieldZ.onEndEdit.AddListener(_ => ApplyParameters());
}
private void ApplyParameters()
{
Vector3 newValue = new Vector3(float.Parse(inputFieldX.text), float.Parse(inputFieldY.text), float.Parse(inputFieldZ.text));
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newValue);
connectedBaseElement.Refresh();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8372da2ad7a105d4aa3904e8b3fdfd71
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: