列表输入二级界面扩展List<float>,特效单元扩展

This commit is contained in:
SoulliesOfficial
2025-02-26 22:54:53 -05:00
parent 1e69a44327
commit 46fe049175
43 changed files with 1041 additions and 1251 deletions

Binary file not shown.

View File

@@ -1,20 +1,23 @@
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class DynamicUIStringUnit : DynamicUICompositeUnit
public class DynamicUIInputFieldUnit : DynamicUICompositeUnit
{
public TMP_InputField stringInputField;
[FormerlySerializedAs("stringInputField")]
public TMP_InputField inputField;
public override void SetUnit(CompositeParameterWindow window, object itemContent)
{
compositeParameterWindow = window;
stringInputField.text = (string)itemContent;
stringInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
inputField.text = itemContent.ToString();
inputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
removeButton.onClick.AddListener(() =>
{
compositeParameterWindow.RemoveUnit(this);
@@ -22,9 +25,9 @@ namespace Ichni.Editor
});
}
public string GetValue()
public T GetValue<T>()
{
return stringInputField.text;
return (T)Convert.ChangeType(inputField.text, typeof(T));
}
}
}

View File

@@ -1,28 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using TMPro;
using UnityEngine;
namespace Ichni.Editor
{
public class DynamicUIGetterInputField : DynamicUIElement
{
public TMP_InputField inputField;
public void SetDefaultText(string text)
{
inputField.text = text;
}
public T GetResult<T>()
{
return (T)System.Convert.ChangeType(inputField.text, typeof(T));
}
public string GetResult()
{
return inputField.text;
}
}
}

View File

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

View File

@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.Events;
@@ -42,12 +43,12 @@ namespace Ichni.Editor
//生成Unit
void GenerateUnit(string content)
{
DynamicUIStringUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIStringUnit>();
DynamicUIInputFieldUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIInputFieldUnit>();
unitList.Add(unit);
unit.SetUnit(this, content);
}
unitPrefab = EditorManager.instance.basePrefabs.stringUnit;
unitPrefab = EditorManager.instance.basePrefabs.inputFieldUnit;
//初始化获取当前的List<string>并生成对应的Unit
List<string> list = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as List<string>;
@@ -67,13 +68,38 @@ namespace Ichni.Editor
//将当前所有Unit的值应用到对应的变量中
ApplyParameters = () =>
{
List<string> list = new List<string>();
foreach (var unit in unitList)
{
list.Add((unit as DynamicUIStringUnit).GetValue());
Debug.Log((unit as DynamicUIStringUnit).GetValue());
}
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, list);
List<string> stringList = unitList.Select(unit => (unit as DynamicUIInputFieldUnit).GetValue<string>()).ToList();
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, stringList);
};
}
public void SetAsFloatList()
{
void GenerateUnit(float content)
{
DynamicUIInputFieldUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIInputFieldUnit>();
unitList.Add(unit);
unit.SetUnit(this, content);
}
unitPrefab = EditorManager.instance.basePrefabs.inputFieldUnit;
List<float> list = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as List<float>;
foreach (float item in list)
{
GenerateUnit(item);
}
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
addNewUnitButton.onClick.AddListener(() =>
{
GenerateUnit(0);
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
});
ApplyParameters = () =>
{
List<float> floatList = unitList.Select(unit => (unit as DynamicUIInputFieldUnit).GetValue<float>()).ToList();
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, floatList);
};
}

View File

@@ -70,7 +70,7 @@ namespace Ichni.Editor
string title, string defaultText = "") //不与参数绑定的InputField
{
DynamicUIInputField inputField = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect)
.GetComponent<DynamicUIInputField>();
inputField.Initialize(null, title, string.Empty);
inputField.SetDefaultValue(defaultText);
@@ -82,7 +82,7 @@ namespace Ichni.Editor
DynamicUIContainer container, string title, string parameterName, bool isAutoUpdate = false) //与参数绑定的InputField
{
DynamicUIInputField inputField = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect)
.GetComponent<DynamicUIInputField>();
inputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(inputField);