重构inspector!

This commit is contained in:
SoulliesOfficial
2025-04-14 17:49:47 -04:00
parent bbca8b43fe
commit 11543b4997
81 changed files with 1037 additions and 903 deletions

View File

@@ -10,28 +10,45 @@ namespace Ichni.Editor
{
public class DynamicUIContainer : MonoBehaviour
{
Inspector Inspector => EditorManager.instance.uiManager.inspector;
public TMP_Text title;
public GridLayoutGroup gridLayoutGroup;
public List<DynamicUIElement> dynamicUIElements = new List<DynamicUIElement>();
[FormerlySerializedAs("container")] public RectTransform rect;
public RectTransform rect;
public List<DynamicUISubcontainer> subcontainers;
public void SetDeviver(int num){//rect 500
gridLayoutGroup.cellSize=new Vector2(Inspector.inspectorRect.rect.width/num,gridLayoutGroup.cellSize.y);
public int gridWidth, gridHeight;
public void Initialize(string titleText)
{
this.title.text = titleText;
this.subcontainers = new List<DynamicUISubcontainer>();
}
public DynamicUISubcontainer GenerateSubcontainer(int elementCountPerRow, float height = 100)
{
DynamicUISubcontainer subcontainer =
Instantiate(EditorManager.instance.basePrefabs.dynamicUISubcontainer, rect).
GetComponent<DynamicUISubcontainer>();
bool CanCompress=true;//这是是想着如果没有按钮以外的东西就把y值调小一点的
subcontainer.Initialize(this, elementCountPerRow, height);
subcontainers.Add(subcontainer);
return subcontainer;
}
foreach(var i in GetComponentsInChildren<DynamicUIElement>()){
i.DeviverSet(num);
if(i.GetType()!=typeof(DynamicUIButton))CanCompress=false;
if(i.GetType()==typeof(DynamicUIBaseColorPicker)||
i.GetType()==typeof(DynamicUIEmissionColorPicker)){//一个container可能不会有除了color以外的的东西吧
gridLayoutGroup.cellSize=new Vector2(gridLayoutGroup.cellSize.x,gridLayoutGroup.cellSize.y*2.5f);
}
public Vector2Int GetGrid(int elementCountPerRow, int heightUnit)
{
return new Vector2Int(600 / elementCountPerRow, 100 * heightUnit);
}
public void CheckGrid(Vector2Int newGrid)
{
if(newGrid.x > gridWidth)
{
gridWidth = newGrid.x;
}
if(newGrid.y > gridHeight)
{
gridHeight = newGrid.y;
}
if(CanCompress)gridLayoutGroup.cellSize=new Vector2(gridLayoutGroup.cellSize.x,gridLayoutGroup.cellSize.y/2);
//Danger写了好多特判
}
}
}

View File

@@ -64,7 +64,7 @@ namespace Ichni.Editor
ApplyParameters();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
inputFieldBaseR.onEndEdit.AddListener(_ => action());
inputFieldBaseG.onEndEdit.AddListener(_ => action());
@@ -75,6 +75,8 @@ namespace Ichni.Editor
sliderG.onValueChanged.AddListener(_ => action());
sliderB.onValueChanged.AddListener(_ => action());
sliderA.onValueChanged.AddListener(_ => action());
return this;
}
}
}

View File

@@ -13,10 +13,9 @@ namespace Ichni.Editor
public Button button;
public TMP_Text buttonText;
public void SetText(string buttonText, bool showTitle)
public void SetText(string buttonText)
{
this.buttonText.text = buttonText;
if(!showTitle) title.gameObject.SetActive(false);
}
public void ApplyFunction(UnityAction function)
@@ -28,7 +27,7 @@ namespace Ichni.Editor
}
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
throw new System.NotImplementedException();
}

View File

@@ -11,6 +11,8 @@ namespace Ichni.Editor
{
public abstract class DynamicUIElement : MonoBehaviour
{
Inspector Inspector => EditorManager.instance.uiManager.inspector;
public TMP_Text title;
public CanvasGroup canvasGroup;
public IBaseElement connectedBaseElement;
@@ -34,28 +36,19 @@ namespace Ichni.Editor
}
}
public void Mark(IHaveInspection inspection, string mark)
public DynamicUIElement Mark(string mark = "Default", IHaveInspection inspection = null)
{
inspection.MarkedElements.Add(mark, this);
inspection ??= Inspector;
if (mark == "Default")
{
mark = title.text;
}
inspection.MarkedElements.TryAdd(mark, this);
return this;
}
public abstract void AddListenerFunction(UnityAction action);
public virtual void DeviverSet(int DeviveNum){
float o=2f/DeviveNum;//因为所有的单UI都是根据2栏来的
Button[] childb=GetComponentsInChildren<Button>();
TMP_Text[] childt=GetComponentsInChildren<TMP_Text>();
foreach (var i in childb){
RectTransform rectTransform = i.GetComponent<RectTransform>();
rectTransform.sizeDelta=new Vector2(rectTransform.sizeDelta.x*o,rectTransform.sizeDelta.y);
}
foreach (var i in childt){
RectTransform rectTransform = i.GetComponent<RectTransform>();
rectTransform.sizeDelta=new Vector2(rectTransform.sizeDelta.x*o,rectTransform.sizeDelta.y);
}
}
//public abstract void ApplyParameters();
public abstract DynamicUIElement AddListenerFunction(UnityAction action);
}
public interface IHaveAutoUpdate

View File

@@ -80,7 +80,7 @@ namespace Ichni.Editor
ApplyParameters();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
toggleEnableEmission.onValueChanged.AddListener(_ => action());
@@ -92,6 +92,8 @@ namespace Ichni.Editor
sliderR.onValueChanged.AddListener(_ => action());
sliderG.onValueChanged.AddListener(_ => action());
sliderB.onValueChanged.AddListener(_ => action());
return this;
}
}
}

View File

@@ -33,9 +33,10 @@ namespace Ichni.Editor
connectedBaseElement.Refresh();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
dropdown.onValueChanged.AddListener(_ => action());
return this;
}
}
}

View File

@@ -23,7 +23,7 @@ namespace Ichni.Editor
Observable.EveryUpdate().Subscribe(_ => text.text = content()).AddTo(gameObject);
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
throw new System.NotImplementedException();
}

View File

@@ -71,9 +71,10 @@ namespace Ichni.Editor
connectedBaseElement.Refresh();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
inputField.onEndEdit.AddListener(_ => action());
return this;
}
}
}

View File

@@ -36,7 +36,7 @@ namespace Ichni.Editor
text.text = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement).ToString();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
throw new NotImplementedException();
}

View File

@@ -35,9 +35,10 @@ namespace Ichni.Editor
connectedBaseElement.Refresh();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
dropdown.onValueChanged.AddListener(_ => action());
return this;
}
}
}

View File

@@ -31,9 +31,10 @@ namespace Ichni.Editor
connectedBaseElement.Refresh();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
toggle.onValueChanged.AddListener(_ => action());
return this;
}
}
}

View File

@@ -113,16 +113,13 @@ namespace Ichni.Editor
connectedBaseElement.Refresh();
}
public override void AddListenerFunction(UnityAction action)
public override DynamicUIElement AddListenerFunction(UnityAction action)
{
inputFieldX.onEndEdit.AddListener(_ => action());
inputFieldY.onEndEdit.AddListener(_ => action());
inputFieldZ.onEndEdit.AddListener(_ => action());
}
public override void DeviverSet(int i)
{
//我什么也不做
return this;
}
}
}

View File

@@ -0,0 +1,30 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace Ichni.Editor
{
public class DynamicUISubcontainer : MonoBehaviour
{
Inspector Inspector => EditorManager.instance.uiManager.inspector;
public DynamicUIContainer parentContainer;
public GridLayoutGroup gridLayoutGroup;
public RectTransform rect;
public List<DynamicUIElement> dynamicUIElements;
public void Initialize(DynamicUIContainer parentContainer, int elementCountPerRow, float height = 100)
{
this.parentContainer = parentContainer;
this.gridLayoutGroup.cellSize = new Vector2(600f / elementCountPerRow, height);
this.dynamicUIElements = new List<DynamicUIElement>();
}
public DynamicUISubcontainer Mark(string mark, IHaveInspection inspection = null)
{
inspection ??= Inspector;
inspection.MarkedSubcontainers.TryAdd(mark, this);
return this;
}
}
}

View File

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

View File

@@ -35,15 +35,16 @@ namespace Ichni.Editor
Destroy(unit.gameObject);
}
public void AddListenerFunction(UnityAction action)
public CompositeParameterWindow AddListenerFunction(UnityAction action)
{
onQuit = action;
return this;
}
}
public partial class CompositeParameterWindow
{
public void SetAsStringList()
public CompositeParameterWindow SetAsStringList()
{
//生成Unit
void GenerateUnit(string content)
@@ -76,9 +77,11 @@ namespace Ichni.Editor
List<string> stringList = unitList.Select(unit => (unit as DynamicUIInputFieldUnit).GetValue<string>()).ToList();
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, stringList);
};
return this;
}
public void SetAsFloatList()
public CompositeParameterWindow SetAsFloatList()
{
void GenerateUnit(float content)
{
@@ -106,9 +109,11 @@ namespace Ichni.Editor
List<float> floatList = unitList.Select(unit => (unit as DynamicUIInputFieldUnit).GetValue<float>()).ToList();
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, floatList);
};
return this;
}
public void SetAsFlexibleFloat()
public CompositeParameterWindow SetAsFlexibleFloat()
{
void GenerateUnit(AnimatedFloat content)
{
@@ -141,9 +146,11 @@ namespace Ichni.Editor
}
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleFloat);
};
return this;
}
public void SetAsFlexibleInt()
public CompositeParameterWindow SetAsFlexibleInt()
{
void GenerateUnit(AnimatedInt content)
{
@@ -176,9 +183,11 @@ namespace Ichni.Editor
}
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleInt);
};
return this;
}
public void SetAsFlexibleBool()
public CompositeParameterWindow SetAsFlexibleBool()
{
void GenerateUnit(AnimatedBool content)
{
@@ -210,9 +219,11 @@ namespace Ichni.Editor
}
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleBool);
};
return this;
}
public void SetAsCustomCurve()
public CompositeParameterWindow SetAsCustomCurve()
{
void GenerateUnit(Keyframe content)
{
@@ -258,9 +269,11 @@ namespace Ichni.Editor
}
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newCurve);
};
return this;
}
public void SetAsStringIntDictionary()
public CompositeParameterWindow SetAsStringIntDictionary()
{
//生成Unit
void GenerateUnit(KeyValuePair<string, int> content)
@@ -298,6 +311,8 @@ namespace Ichni.Editor
}
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, dictionaryList);
};
return this;
}
}
}

View File

@@ -14,6 +14,7 @@ namespace Ichni.Editor
{
public RectTransform WindowRect { get; set; }
public List<DynamicUIContainer> Containers { get; set; }
public Dictionary<string, DynamicUISubcontainer> MarkedSubcontainers { get; set; }
public Dictionary<string, DynamicUIElement> MarkedElements { get; set; }
public CompositeParameterWindow GenerateCompositeParameterWindow(IBaseElement baseElement, string title,
@@ -33,12 +34,12 @@ namespace Ichni.Editor
graphicalFlexibleFloatWindow.Initialize(baseElement, title, FlexibleFloats, subTitle);
return graphicalFlexibleFloatWindow;
}
public DynamicUIContainer GenerateContainer(string title)
public DynamicUIContainer GenerateContainer(string titleText)
{
DynamicUIContainer container =
Object.Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, WindowRect)
.GetComponent<DynamicUIContainer>();
container.title.text = title;
container.Initialize(titleText);
Containers.Add(container);
return container;
}
@@ -53,154 +54,154 @@ namespace Ichni.Editor
return container;
}
public DynamicUIButton GenerateButton(IBaseElement baseElement, DynamicUIContainer container, string buttonText,
UnityAction function, string title = "null")
public DynamicUIButton GenerateButton(IBaseElement baseElement, DynamicUISubcontainer subcontainer, string title,
UnityAction function)
{
DynamicUIButton button = Object.Instantiate(EditorManager.instance.basePrefabs.button, container.rect)
DynamicUIButton button = Object.Instantiate(EditorManager.instance.basePrefabs.button, subcontainer.rect)
.GetComponent<DynamicUIButton>();
button.SetText(buttonText, title != "null");
button.SetText(title);
button.Initialize(baseElement, title, string.Empty);
button.ApplyFunction(function);
container.dynamicUIElements.Add(button);
subcontainer.dynamicUIElements.Add(button);
return button;
}
public DynamicUIToggle GenerateToggle(IBaseElement baseElement, DynamicUIContainer container, string title,
public DynamicUIToggle GenerateToggle(IBaseElement baseElement, DynamicUISubcontainer subcontainer, string title,
string parameterName)
{
DynamicUIToggle toggle = Object.Instantiate(EditorManager.instance.basePrefabs.toggle, container.rect)
DynamicUIToggle toggle = Object.Instantiate(EditorManager.instance.basePrefabs.toggle, subcontainer.rect)
.GetComponent<DynamicUIToggle>();
toggle.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(toggle);
subcontainer.dynamicUIElements.Add(toggle);
return toggle;
}
public DynamicUIInputField GenerateInputField(DynamicUIContainer container,
public DynamicUIInputField GenerateInputField(DynamicUISubcontainer subcontainer,
string title, string defaultText = "") //不与参数绑定的InputField
{
DynamicUIInputField inputField = Object
.Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.inputField, subcontainer.rect)
.GetComponent<DynamicUIInputField>();
inputField.Initialize(null, title, string.Empty);
inputField.SetDefaultValue(defaultText);
container.dynamicUIElements.Add(inputField);
subcontainer.dynamicUIElements.Add(inputField);
return inputField;
}
public DynamicUIInputField GenerateInputField(IBaseElement baseElement,
DynamicUIContainer container, string title, string parameterName, bool isAutoUpdate = false) //与参数绑定的InputField
DynamicUISubcontainer subcontainer, string title, string parameterName, bool isAutoUpdate = false) //与参数绑定的InputField
{
DynamicUIInputField inputField = Object
.Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.inputField, subcontainer.rect)
.GetComponent<DynamicUIInputField>();
inputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(inputField);
subcontainer.dynamicUIElements.Add(inputField);
return inputField;
}
public DynamicUIVector3InputField GenerateVector3InputField(DynamicUIContainer container, string title,
public DynamicUIVector3InputField GenerateVector3InputField(DynamicUISubcontainer subcontainer, string title,
Vector3 defaultVector3 = default)
{
DynamicUIVector3InputField vector3InputField =
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, subcontainer.rect)
.GetComponent<DynamicUIVector3InputField>();
vector3InputField.Initialize(null, title, string.Empty);
vector3InputField.SetDefaultValue(defaultVector3);
container.dynamicUIElements.Add(vector3InputField);
subcontainer.dynamicUIElements.Add(vector3InputField);
return vector3InputField;
}
public DynamicUIVector3InputField GenerateVector3InputField(IBaseElement baseElement,
DynamicUIContainer container, string title, string parameterName, bool isAutoUpdate = false)
DynamicUISubcontainer subcontainer, string title, string parameterName, bool isAutoUpdate = false)
{
DynamicUIVector3InputField vector3InputField =
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, subcontainer.rect)
.GetComponent<DynamicUIVector3InputField>();
vector3InputField.Initialize(baseElement, title, parameterName);
vector3InputField.SetAutoUpdate(isAutoUpdate);
container.dynamicUIElements.Add(vector3InputField);
subcontainer.dynamicUIElements.Add(vector3InputField);
return vector3InputField;
}
public DynamicUIBaseColorPicker GenerateBaseColorPicker(IBaseElement baseElement, DynamicUIContainer container,
public DynamicUIBaseColorPicker GenerateBaseColorPicker(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
string title, string parameterName)
{
DynamicUIBaseColorPicker colorPicker = Object
.Instantiate(EditorManager.instance.basePrefabs.baseColorPicker, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.baseColorPicker, subcontainer.rect)
.GetComponent<DynamicUIBaseColorPicker>();
colorPicker.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(colorPicker);
subcontainer.dynamicUIElements.Add(colorPicker);
return colorPicker;
}
public DynamicUIEmissionColorPicker GenerateEmissionColorPicker(IBaseElement baseElement,
DynamicUIContainer container,
DynamicUISubcontainer subcontainer,
string title, string emissionEnabledName, string emissionColorName, string emissionIntensityName)
{
DynamicUIEmissionColorPicker colorPicker = Object
.Instantiate(EditorManager.instance.basePrefabs.emissionColorPicker, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.emissionColorPicker, subcontainer.rect)
.GetComponent<DynamicUIEmissionColorPicker>();
colorPicker.Initialize(baseElement, title, emissionEnabledName, emissionColorName, emissionIntensityName);
container.dynamicUIElements.Add(colorPicker);
subcontainer.dynamicUIElements.Add(colorPicker);
return colorPicker;
}
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUIContainer container,
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
string content)
{
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, container.rect)
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, subcontainer.rect)
.GetComponent<DynamicUIHintText>();
hintText.Initialize(baseElement, string.Empty, string.Empty);
hintText.SetContent(content);
container.dynamicUIElements.Add(hintText);
subcontainer.dynamicUIElements.Add(hintText);
return hintText;
}
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUIContainer container, Func<string> action)
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUISubcontainer subcontainer, Func<string> action)
{
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, container.rect)
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, subcontainer.rect)
.GetComponent<DynamicUIHintText>();
hintText.Initialize(baseElement, string.Empty, string.Empty);
hintText.SetUpdatingContent(action);
container.dynamicUIElements.Add(hintText);
subcontainer.dynamicUIElements.Add(hintText);
return hintText;
}
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUIContainer container,
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
string title, string parameterName, bool isAutoUpdate = false)
{
DynamicUIParameterText parameterText = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterText, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.parameterText, subcontainer.rect)
.GetComponent<DynamicUIParameterText>();
parameterText.Initialize(baseElement, title, parameterName);
parameterText.SetAutoUpdate(isAutoUpdate);
container.dynamicUIElements.Add(parameterText);
subcontainer.dynamicUIElements.Add(parameterText);
return parameterText;
}
public DynamicUIEnumDropdown GenerateDropdown(IBaseElement baseElement, DynamicUIContainer container,
public DynamicUIEnumDropdown GenerateDropdown(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
string title,
System.Type enumType, string parameterName)
{
DynamicUIEnumDropdown enumDropdown = Object
.Instantiate(EditorManager.instance.basePrefabs.enumDropdown, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.enumDropdown, subcontainer.rect)
.GetComponent<DynamicUIEnumDropdown>();
enumDropdown.SetUpEnum(enumType);
enumDropdown.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(enumDropdown);
subcontainer.dynamicUIElements.Add(enumDropdown);
return enumDropdown;
}
public DynamicUIStringListDropdown GenerateDropdown(IBaseElement baseElement, DynamicUIContainer container,
public DynamicUIStringListDropdown GenerateDropdown(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
string title,
List<string> stringList, string parameterName)
{
DynamicUIStringListDropdown stringListDropdown = Object
.Instantiate(EditorManager.instance.basePrefabs.stringListDropdown, container.rect)
.Instantiate(EditorManager.instance.basePrefabs.stringListDropdown, subcontainer.rect)
.GetComponent<DynamicUIStringListDropdown>();
stringListDropdown.SetUpStringList(stringList);
stringListDropdown.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(stringListDropdown);
subcontainer.dynamicUIElements.Add(stringListDropdown);
return stringListDropdown;
}
}

View File

@@ -17,12 +17,14 @@ namespace Ichni.Editor
public RectTransform WindowRect { get; set; }
public List<DynamicUIContainer> Containers { get; set; }
public Dictionary<string, DynamicUISubcontainer> MarkedSubcontainers { get; set; }
public Dictionary<string, DynamicUIElement> MarkedElements { get; set; }
private void Awake()
{
WindowRect = inspectorRect;
Containers = new List<DynamicUIContainer>();
MarkedSubcontainers = new Dictionary<string, DynamicUISubcontainer>();
MarkedElements = new Dictionary<string, DynamicUIElement>();
}

View File

@@ -10,6 +10,7 @@ namespace Ichni.Editor
public GameElement connectedGameElement;
public RectTransform WindowRect { get; set; }
public List<DynamicUIContainer> Containers { get; set; }
public Dictionary<string, DynamicUISubcontainer> MarkedSubcontainers { get; set; }
public Dictionary<string, DynamicUIElement> MarkedElements { get; set; }
public void Initialize(GameElement gameElement, string titleText)
@@ -17,6 +18,7 @@ namespace Ichni.Editor
StartCoroutine(WindowAnim.ShowPanelOnScale(gameObject));
WindowRect = windowRect;
Containers = new List<DynamicUIContainer>();
MarkedSubcontainers = new Dictionary<string, DynamicUISubcontainer>();
MarkedElements = new Dictionary<string, DynamicUIElement>();
connectedGameElement = gameElement;

View File

@@ -39,26 +39,26 @@ namespace Ichni.Editor
return container;
}
public DynamicUIInputField GenerateInputField(DynamicUIContainer container,
public DynamicUIInputField GenerateInputField(DynamicUISubcontainer subcontainer,
string title, string defaultText = "") //不与参数绑定的InputField
{
DynamicUIInputField inputField = Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect)
DynamicUIInputField inputField = Instantiate(EditorManager.instance.basePrefabs.inputField, subcontainer.rect)
.GetComponent<DynamicUIInputField>();
inputField.Initialize(null, title, string.Empty);
inputField.SetDefaultValue(defaultText);
container.dynamicUIElements.Add(inputField);
subcontainer.dynamicUIElements.Add(inputField);
return inputField;
}
public DynamicUIButton GenerateButton(DynamicUIContainer container, string buttonText,
UnityAction function, string title = "null")
public DynamicUIButton GenerateButton(DynamicUISubcontainer subcontainer, string title,
UnityAction function)
{
DynamicUIButton button = Instantiate(EditorManager.instance.basePrefabs.button, container.rect)
DynamicUIButton button = Instantiate(EditorManager.instance.basePrefabs.button, subcontainer.rect)
.GetComponent<DynamicUIButton>();
button.SetText(buttonText, title != "null");
button.SetText(title);
button.Initialize(null, title, string.Empty);
button.ApplyFunction(function);
container.dynamicUIElements.Add(button);
subcontainer.dynamicUIElements.Add(button);
return button;
}
}

View File

@@ -60,8 +60,9 @@ namespace Ichni.Editor
saveClipWindow.Initialize("Save Clip: " + currentElement.elementName, () => clipManagementWindow = null);
var container = saveClipWindow.GenerateContainer();
var clipNameInputField = saveClipWindow.GenerateInputField(container, "Clip Name", currentElement.elementName);
var applyClipButton = saveClipWindow.GenerateButton(container, "Apply", () =>
var clipSettings = container.GenerateSubcontainer(3);
var clipNameInputField = saveClipWindow.GenerateInputField(clipSettings, "Clip Name", currentElement.elementName);
var applyClipButton = saveClipWindow.GenerateButton(clipSettings, "Apply", () =>
{
EditorManager.instance.projectManager.beatmapClipManager.SaveClip(clipNameInputField.GetValue<string>());
});
@@ -92,8 +93,9 @@ namespace Ichni.Editor
loadClipWindow.Initialize("Load Clip", () => clipManagementWindow = null);
var container = loadClipWindow.GenerateContainer();
var clipNameInputField = loadClipWindow.GenerateInputField(container, "Clip Name");
var applyClipButton = loadClipWindow.GenerateButton(container, "Apply", () =>
var clipSettings = container.GenerateSubcontainer(3);
var clipNameInputField = loadClipWindow.GenerateInputField(clipSettings, "Clip Name");
var applyClipButton = loadClipWindow.GenerateButton(clipSettings, "Apply", () =>
{
EditorManager.instance.projectManager.beatmapClipManager.LoadClip(clipNameInputField.GetValue<string>());
});
@@ -111,7 +113,8 @@ namespace Ichni.Editor
beatmapToolsWindow.Initialize("Beatmap Tools", () => clipManagementWindow = null);
var container = beatmapToolsWindow.GenerateContainer("Note Tools");
var applyTimeOnNameButton = beatmapToolsWindow.GenerateButton(container, "Apply Time On Note Name", () =>
var beatmapToolsSettings = container.GenerateSubcontainer(3);
var applyTimeOnNameButton = beatmapToolsWindow.GenerateButton(beatmapToolsSettings, "Apply Time On Note Name", () =>
{
List<NoteBase> allNotes = EditorManager.instance.beatmapContainer.gameElementList.FindAll(x => x is NoteBase).ConvertAll(x => x as NoteBase);
List<Tap> allTaps = allNotes.FindAll(x => x is Tap).ConvertAll(x => x as Tap);