重构inspector!
This commit is contained in:
@@ -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:写了好多特判
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
30
Assets/Scripts/DynamicUI/DynamicUISubcontainer.cs
Normal file
30
Assets/Scripts/DynamicUI/DynamicUISubcontainer.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/DynamicUI/DynamicUISubcontainer.cs.meta
Normal file
11
Assets/Scripts/DynamicUI/DynamicUISubcontainer.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0047a92c04d25bf4db4bf2670b936dc0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user