239 lines
12 KiB
C#
239 lines
12 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using Ichni;
|
||
using Ichni.Editor;
|
||
using Ichni.RhythmGame;
|
||
using UnityEngine;
|
||
using UnityEngine.Events;
|
||
using UnityEngine.Profiling;
|
||
using Object = UnityEngine.Object;
|
||
|
||
namespace Ichni.Editor
|
||
{
|
||
public interface IHaveInspection
|
||
{
|
||
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,
|
||
string parameterName)
|
||
{
|
||
CompositeParameterWindow compositeParameterWindow =
|
||
Object.Instantiate(EditorManager.instance.basePrefabs.compositeParameterWindow,
|
||
EditorManager.instance.uiManager.inspector.inspectorCanvas.GetComponent<RectTransform>())
|
||
.GetComponent<CompositeParameterWindow>();
|
||
compositeParameterWindow.Initialize(baseElement, title, parameterName);
|
||
return compositeParameterWindow;
|
||
}
|
||
public GraphicalFlexibleFloatWindow GenerateGraphicalFlexibleFloatWindow(IBaseElement baseElement, string title, FlexibleFloat[] FlexibleFloats, string[] subTitle)
|
||
{
|
||
GraphicalFlexibleFloatWindow graphicalFlexibleFloatWindow = Object.Instantiate(EditorManager.instance.basePrefabs.graphicalFlexibleFloatWindow, EditorManager.instance.uiManager.inspector.inspectorCanvas.GetComponent<RectTransform>())
|
||
.GetComponent<GraphicalFlexibleFloatWindow>();
|
||
graphicalFlexibleFloatWindow.Initialize(baseElement, title, FlexibleFloats, subTitle);
|
||
return graphicalFlexibleFloatWindow;
|
||
}
|
||
public SampleWindow GenerateSampler(GameElement baseElement, string title)
|
||
{
|
||
SampleWindow sampler = Object.Instantiate(EditorManager.instance.basePrefabs.sampler, EditorManager.instance.uiManager.inspector.inspectorCanvas.GetComponent<RectTransform>())
|
||
.GetComponent<SampleWindow>();
|
||
sampler.Initialize(baseElement, title);
|
||
return sampler;
|
||
}
|
||
public DynamicUIContainer GenerateContainer(string titleText)
|
||
{
|
||
DynamicUIContainer container =
|
||
Object.Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, WindowRect)
|
||
.GetComponent<DynamicUIContainer>();
|
||
container.Initialize(titleText);
|
||
Containers.Add(container);
|
||
return container;
|
||
}
|
||
|
||
public DynamicUIContainer GenerateContainer()
|
||
{
|
||
DynamicUIContainer container =
|
||
Object.Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, WindowRect)
|
||
.GetComponent<DynamicUIContainer>();
|
||
Object.Destroy(container.title.gameObject);
|
||
Containers.Add(container);
|
||
return container;
|
||
}
|
||
|
||
public DynamicUIButton GenerateButton(IBaseElement baseElement, DynamicUISubcontainer subcontainer, string title,
|
||
UnityAction function)
|
||
{
|
||
DynamicUIButton button = Object.Instantiate(EditorManager.instance.basePrefabs.button, subcontainer.rect)
|
||
.GetComponent<DynamicUIButton>();
|
||
button.SetText(title);
|
||
button.Initialize(baseElement, title, string.Empty);
|
||
button.ApplyFunction(function);
|
||
subcontainer.dynamicUIElements.Add(button);
|
||
return button;
|
||
}
|
||
|
||
public DynamicUIToggle GenerateToggle(IBaseElement baseElement, DynamicUISubcontainer subcontainer, string title,
|
||
string parameterName)
|
||
{
|
||
DynamicUIToggle toggle = Object.Instantiate(EditorManager.instance.basePrefabs.toggle, subcontainer.rect)
|
||
.GetComponent<DynamicUIToggle>();
|
||
toggle.Initialize(baseElement, title, parameterName);
|
||
subcontainer.dynamicUIElements.Add(toggle);
|
||
return toggle;
|
||
}
|
||
|
||
public DynamicUIInputField GenerateInputField(DynamicUISubcontainer subcontainer,
|
||
string title, string defaultText = "") //不与参数绑定的InputField
|
||
{
|
||
DynamicUIInputField inputField = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.inputField, subcontainer.rect)
|
||
.GetComponent<DynamicUIInputField>();
|
||
inputField.Initialize(null, title, string.Empty);
|
||
inputField.SetDefaultValue(defaultText);
|
||
subcontainer.dynamicUIElements.Add(inputField);
|
||
return inputField;
|
||
}
|
||
|
||
public DynamicUIInputField GenerateInputField(IBaseElement baseElement,
|
||
DynamicUISubcontainer subcontainer, string title, string parameterName, bool isAutoUpdate = false) //与参数绑定的InputField
|
||
{
|
||
DynamicUIInputField inputField = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.inputField, subcontainer.rect)
|
||
.GetComponent<DynamicUIInputField>();
|
||
inputField.Initialize(baseElement, title, parameterName);
|
||
subcontainer.dynamicUIElements.Add(inputField);
|
||
return inputField;
|
||
}
|
||
|
||
public DynamicUIVector3InputField GenerateVector3InputField(DynamicUISubcontainer subcontainer, string title,
|
||
Vector3 defaultVector3 = default)
|
||
{
|
||
DynamicUIVector3InputField vector3InputField =
|
||
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, subcontainer.rect)
|
||
.GetComponent<DynamicUIVector3InputField>();
|
||
vector3InputField.Initialize(null, title, string.Empty);
|
||
vector3InputField.SetDefaultValue(defaultVector3);
|
||
subcontainer.dynamicUIElements.Add(vector3InputField);
|
||
return vector3InputField;
|
||
}
|
||
|
||
public DynamicUIVector3InputField GenerateVector3InputField(IBaseElement baseElement,
|
||
DynamicUISubcontainer subcontainer, string title, string parameterName, bool isAutoUpdate = false)
|
||
{
|
||
DynamicUIVector3InputField vector3InputField =
|
||
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, subcontainer.rect)
|
||
.GetComponent<DynamicUIVector3InputField>();
|
||
vector3InputField.Initialize(baseElement, title, parameterName);
|
||
vector3InputField.SetAutoUpdate(isAutoUpdate);
|
||
subcontainer.dynamicUIElements.Add(vector3InputField);
|
||
return vector3InputField;
|
||
}
|
||
|
||
public DynamicUIVector2InputField GenerateVector2InputField(IBaseElement baseElement,
|
||
DynamicUISubcontainer subcontainer, string title, string parameterName, bool isAutoUpdate = false)
|
||
{
|
||
DynamicUIVector2InputField vector2InputField =
|
||
Object.Instantiate(EditorManager.instance.basePrefabs.vector2InputField, subcontainer.rect)
|
||
.GetComponent<DynamicUIVector2InputField>();
|
||
vector2InputField.Initialize(baseElement, title, parameterName);
|
||
vector2InputField.SetAutoUpdate(isAutoUpdate);
|
||
subcontainer.dynamicUIElements.Add(vector2InputField);
|
||
return vector2InputField;
|
||
}
|
||
|
||
public DynamicUIBaseColorPicker GenerateBaseColorPicker(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
|
||
string title, string parameterName)
|
||
{
|
||
DynamicUIBaseColorPicker colorPicker = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.baseColorPicker, subcontainer.rect)
|
||
.GetComponent<DynamicUIBaseColorPicker>();
|
||
colorPicker.Initialize(baseElement, title, parameterName);
|
||
subcontainer.dynamicUIElements.Add(colorPicker);
|
||
return colorPicker;
|
||
}
|
||
|
||
public DynamicUIEmissionColorPicker GenerateEmissionColorPicker(IBaseElement baseElement,
|
||
DynamicUISubcontainer subcontainer,
|
||
string title, string emissionEnabledName, string emissionColorName, string emissionIntensityName)
|
||
{
|
||
DynamicUIEmissionColorPicker colorPicker = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.emissionColorPicker, subcontainer.rect)
|
||
.GetComponent<DynamicUIEmissionColorPicker>();
|
||
colorPicker.Initialize(baseElement, title, emissionEnabledName, emissionColorName, emissionIntensityName);
|
||
subcontainer.dynamicUIElements.Add(colorPicker);
|
||
return colorPicker;
|
||
}
|
||
|
||
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
|
||
string content)
|
||
{
|
||
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, subcontainer.rect)
|
||
.GetComponent<DynamicUIHintText>();
|
||
hintText.Initialize(baseElement, string.Empty, string.Empty);
|
||
hintText.SetContent(content);
|
||
subcontainer.dynamicUIElements.Add(hintText);
|
||
return hintText;
|
||
}
|
||
|
||
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUISubcontainer subcontainer, Func<string> action)
|
||
{
|
||
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, subcontainer.rect)
|
||
.GetComponent<DynamicUIHintText>();
|
||
hintText.Initialize(baseElement, string.Empty, string.Empty);
|
||
hintText.SetUpdatingContent(action);
|
||
subcontainer.dynamicUIElements.Add(hintText);
|
||
return hintText;
|
||
}
|
||
|
||
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
|
||
string title, string parameterName, bool isAutoUpdate = false)
|
||
{
|
||
DynamicUIParameterText parameterText = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.parameterText, subcontainer.rect)
|
||
.GetComponent<DynamicUIParameterText>();
|
||
parameterText.Initialize(baseElement, title, parameterName);
|
||
parameterText.SetAutoUpdate(isAutoUpdate);
|
||
subcontainer.dynamicUIElements.Add(parameterText);
|
||
return parameterText;
|
||
}
|
||
|
||
public DynamicUIEnumDropdown GenerateDropdown(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
|
||
string title,
|
||
System.Type enumType, string parameterName)
|
||
{
|
||
DynamicUIEnumDropdown enumDropdown = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.enumDropdown, subcontainer.rect)
|
||
.GetComponent<DynamicUIEnumDropdown>();
|
||
enumDropdown.SetUpEnum(enumType);
|
||
enumDropdown.Initialize(baseElement, title, parameterName);
|
||
subcontainer.dynamicUIElements.Add(enumDropdown);
|
||
return enumDropdown;
|
||
}
|
||
|
||
public DynamicUIStringListDropdown GenerateDropdown(IBaseElement baseElement, DynamicUISubcontainer subcontainer,
|
||
string title,
|
||
List<string> stringList, string parameterName)
|
||
{
|
||
DynamicUIStringListDropdown stringListDropdown = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.stringListDropdown, subcontainer.rect)
|
||
.GetComponent<DynamicUIStringListDropdown>();
|
||
stringListDropdown.SetUpStringList(stringList);
|
||
stringListDropdown.Initialize(baseElement, title, parameterName);
|
||
subcontainer.dynamicUIElements.Add(stringListDropdown);
|
||
return stringListDropdown;
|
||
}
|
||
|
||
// 新增:HSV色盘生成方法
|
||
public HsvDrawer GenerateHsvDrawer(IBaseElement baseElement, DynamicUISubcontainer subcontainer, string title, string parameterName)
|
||
{
|
||
HsvDrawer hsvDrawer = Object
|
||
.Instantiate(EditorManager.instance.basePrefabs.hsvDrawer, subcontainer.rect)
|
||
.GetComponent<HsvDrawer>();
|
||
hsvDrawer.Initialize(baseElement, title, parameterName);
|
||
subcontainer.dynamicUIElements.Add(hsvDrawer);
|
||
return hsvDrawer;
|
||
}
|
||
}
|
||
} |