Inspector Secondary Window & QuickCopy

inspector的二级界面,主要用于工具制作。
重新制作了Track的QuickCopy功能
This commit is contained in:
SoulliesOfficial
2025-02-21 01:03:01 -05:00
parent 039bc5bddf
commit cd9ef00d13
50 changed files with 2332 additions and 229 deletions

View File

@@ -0,0 +1,189 @@
using System.Collections;
using System.Collections.Generic;
using Ichni;
using Ichni.Editor;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.Events;
namespace Ichni.Editor
{
public interface IHaveInspection
{
public RectTransform WindowRect { get; set; }
public List<DynamicUIContainer> Containers { 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 DynamicUIContainer GenerateContainer(string title)
{
DynamicUIContainer container =
Object.Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, WindowRect)
.GetComponent<DynamicUIContainer>();
container.title.text = title;
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, DynamicUIContainer container, string buttonText,
UnityAction function, string title = "null")
{
DynamicUIButton button = Object.Instantiate(EditorManager.instance.basePrefabs.button, container.rect)
.GetComponent<DynamicUIButton>();
button.SetText(buttonText, title != "null");
button.Initialize(baseElement, title, "null");
button.ApplyFunction(function);
container.dynamicUIElements.Add(button);
return button;
}
public DynamicUIToggle GenerateToggle(IBaseElement baseElement, DynamicUIContainer container, string title,
string parameterName)
{
DynamicUIToggle toggle = Object.Instantiate(EditorManager.instance.basePrefabs.toggle, container.rect)
.GetComponent<DynamicUIToggle>();
toggle.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(toggle);
return toggle;
}
public DynamicUIGetterInputField GenerateGetterInputField(DynamicUIContainer container,
string title, string defaultText)
{
DynamicUIGetterInputField getterInputField = Object
.Instantiate(EditorManager.instance.basePrefabs.getterInputField, container.rect)
.GetComponent<DynamicUIGetterInputField>();
getterInputField.Initialize(null, title, string.Empty);
getterInputField.SetDefaultText(defaultText);
container.dynamicUIElements.Add(getterInputField);
return getterInputField;
}
public DynamicUIParameterInputField GenerateParameterInputField(IBaseElement baseElement,
DynamicUIContainer container,
string title, string parameterName)
{
DynamicUIParameterInputField parameterInputField = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterInputField, container.rect)
.GetComponent<DynamicUIParameterInputField>();
parameterInputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(parameterInputField);
return parameterInputField;
}
public DynamicUIVector3InputField GenerateVector3InputField(IBaseElement baseElement,
DynamicUIContainer container,
string title, string parameterName)
{
DynamicUIVector3InputField vector3InputField =
Object.Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
.GetComponent<DynamicUIVector3InputField>();
vector3InputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(vector3InputField);
return vector3InputField;
}
public DynamicUIBaseColorPicker GenerateBaseColorPicker(IBaseElement baseElement, DynamicUIContainer container,
string title, string parameterName)
{
DynamicUIBaseColorPicker colorPicker = Object
.Instantiate(EditorManager.instance.basePrefabs.baseColorPicker, container.rect)
.GetComponent<DynamicUIBaseColorPicker>();
colorPicker.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(colorPicker);
return colorPicker;
}
public DynamicUIEmissionColorPicker GenerateEmissionColorPicker(IBaseElement baseElement,
DynamicUIContainer container,
string title, string emissionEnabledName, string emissionColorName, string emissionIntensityName)
{
DynamicUIEmissionColorPicker colorPicker = Object
.Instantiate(EditorManager.instance.basePrefabs.emissionColorPicker, container.rect)
.GetComponent<DynamicUIEmissionColorPicker>();
colorPicker.Initialize(baseElement, title, emissionEnabledName, emissionColorName, emissionIntensityName);
container.dynamicUIElements.Add(colorPicker);
return colorPicker;
}
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUIContainer container,
string content)
{
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, container.rect)
.GetComponent<DynamicUIHintText>();
hintText.Initialize(baseElement, string.Empty, string.Empty);
hintText.SetContent(content);
container.dynamicUIElements.Add(hintText);
return hintText;
}
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUIContainer container,
System.Func<string> action)
{
DynamicUIHintText hintText = Object.Instantiate(EditorManager.instance.basePrefabs.hintText, container.rect)
.GetComponent<DynamicUIHintText>();
hintText.Initialize(baseElement, string.Empty, string.Empty);
hintText.SetUpdatingContent(action);
container.dynamicUIElements.Add(hintText);
return hintText;
}
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUIContainer container,
string title,
string parameterName, bool isAlwaysUpdate = false)
{
DynamicUIParameterText parameterText = Object
.Instantiate(EditorManager.instance.basePrefabs.parameterText, container.rect)
.GetComponent<DynamicUIParameterText>();
parameterText.Initialize(baseElement, title, parameterName);
parameterText.isAlwaysUpdated = isAlwaysUpdate;
container.dynamicUIElements.Add(parameterText);
return parameterText;
}
public DynamicUIEnumDropdown GenerateDropdown(IBaseElement baseElement, DynamicUIContainer container,
string title,
System.Type enumType, string parameterName)
{
DynamicUIEnumDropdown enumDropdown = Object
.Instantiate(EditorManager.instance.basePrefabs.enumDropdown, container.rect)
.GetComponent<DynamicUIEnumDropdown>();
enumDropdown.SetUpEnum(enumType);
enumDropdown.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(enumDropdown);
return enumDropdown;
}
public DynamicUIStringListDropdown GenerateDropdown(IBaseElement baseElement, DynamicUIContainer container,
string title,
List<string> stringList, string parameterName)
{
DynamicUIStringListDropdown stringListDropdown = Object
.Instantiate(EditorManager.instance.basePrefabs.stringListDropdown, container.rect)
.GetComponent<DynamicUIStringListDropdown>();
stringListDropdown.SetUpStringList(stringList);
stringListDropdown.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(stringListDropdown);
return stringListDropdown;
}
}
}

View File

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

View File

@@ -9,12 +9,20 @@ using UnityEngine.Events;
namespace Ichni.Editor
{
public partial class Inspector : StaticWindow
public partial class Inspector : StaticWindow, IHaveInspection
{
public GameElement connectedGameElement;
public Canvas inspectorCanvas;
public RectTransform inspectorRect;
public List<DynamicUIContainer> containers;
public RectTransform WindowRect { get; set; }
public List<DynamicUIContainer> Containers { get; set; }
private void Awake()
{
WindowRect = inspectorRect;
Containers = new List<DynamicUIContainer>();
}
/// <summary>
/// 先清空所有的容器然后为当前的GameElement设置Inspector
@@ -26,159 +34,19 @@ namespace Ichni.Editor
connectedGameElement = gameElement;
connectedGameElement.SetUpInspector();
}
public void ClearInspector()
{
containers.ForEach(container => Destroy(container.gameObject));
containers.Clear();
}
}
public partial class Inspector
{
public CompositeParameterWindow GenerateCompositeParameterWindow(IBaseElement baseElement, string title, string parameterName)
{
CompositeParameterWindow compositeParameterWindow =
Instantiate(EditorManager.instance.basePrefabs.compositeParameterWindow,
EditorManager.instance.uiManager.inspector.inspectorCanvas.GetComponent<RectTransform>())
.GetComponent<CompositeParameterWindow>();
compositeParameterWindow.Initialize(baseElement, title, parameterName);
return compositeParameterWindow;
}
public DynamicUIContainer GenerateContainer(string title)
{
DynamicUIContainer container =
Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, inspectorRect)
.GetComponent<DynamicUIContainer>();
container.title.text = title;
containers.Add(container);
return container;
Containers.ForEach(container => Destroy(container.gameObject));
Containers.Clear();
}
public DynamicUIContainer GenerateContainer()
public InspectorSecondaryWindow GenerateSecondaryWindow(GameElement gameElement, string title)
{
DynamicUIContainer container =
Instantiate(EditorManager.instance.basePrefabs.dynamicUIContainer, inspectorRect)
.GetComponent<DynamicUIContainer>();
Destroy(container.title.gameObject);
containers.Add(container);
return container;
}
public DynamicUIButton GenerateButton(IBaseElement baseElement, DynamicUIContainer container, string buttonText,
UnityAction function, string title = "null")
{
DynamicUIButton button = Instantiate(EditorManager.instance.basePrefabs.button, container.rect)
.GetComponent<DynamicUIButton>();
button.SetText(buttonText, title != "null");
button.Initialize(baseElement, title, "null");
button.ApplyFunction(function);
container.dynamicUIElements.Add(button);
return button;
}
public DynamicUIToggle GenerateToggle(IBaseElement baseElement, DynamicUIContainer container, string title,
string parameterName)
{
DynamicUIToggle toggle = Instantiate(EditorManager.instance.basePrefabs.toggle, container.rect)
.GetComponent<DynamicUIToggle>();
toggle.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(toggle);
return toggle;
}
public DynamicUIInputField GenerateInputField(IBaseElement baseElement, DynamicUIContainer container,
string title, string parameterName)
{
DynamicUIInputField inputField = Instantiate(EditorManager.instance.basePrefabs.inputField, container.rect)
.GetComponent<DynamicUIInputField>();
inputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(inputField);
return inputField;
}
public DynamicUIVector3InputField GenerateVec3InputField(IBaseElement baseElement, DynamicUIContainer container,
string title, string parameterName)
{
DynamicUIVector3InputField vector3InputField =
Instantiate(EditorManager.instance.basePrefabs.vector3InputField, container.rect)
.GetComponent<DynamicUIVector3InputField>();
vector3InputField.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(vector3InputField);
return vector3InputField;
}
public DynamicUIBaseColorPicker GenerateBaseColorPicker(IBaseElement baseElement, DynamicUIContainer container,
string title, string parameterName)
{
DynamicUIBaseColorPicker colorPicker = Instantiate(EditorManager.instance.basePrefabs.baseColorPicker, container.rect)
.GetComponent<DynamicUIBaseColorPicker>();
colorPicker.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(colorPicker);
return colorPicker;
}
public DynamicUIEmissionColorPicker GenerateEmissionColorPicker(IBaseElement baseElement, DynamicUIContainer container,
string title, string emissionEnabledName, string emissionColorName, string emissionIntensityName)
{
DynamicUIEmissionColorPicker colorPicker = Instantiate(EditorManager.instance.basePrefabs.emissionColorPicker, container.rect)
.GetComponent<DynamicUIEmissionColorPicker>();
colorPicker.Initialize(baseElement, title, emissionEnabledName, emissionColorName, emissionIntensityName);
container.dynamicUIElements.Add(colorPicker);
return colorPicker;
}
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUIContainer container, string content)
{
DynamicUIHintText hintText = Instantiate(EditorManager.instance.basePrefabs.hintText, container.rect)
.GetComponent<DynamicUIHintText>();
hintText.Initialize(baseElement, string.Empty, string.Empty);
hintText.SetContent(content);
container.dynamicUIElements.Add(hintText);
return hintText;
}
public DynamicUIHintText GenerateHintText(IBaseElement baseElement, DynamicUIContainer container, Func<string> action)
{
DynamicUIHintText hintText = Instantiate(EditorManager.instance.basePrefabs.hintText, container.rect)
.GetComponent<DynamicUIHintText>();
hintText.Initialize(baseElement, string.Empty, string.Empty);
hintText.SetUpdatingContent(action);
container.dynamicUIElements.Add(hintText);
return hintText;
}
public DynamicUIParameterText GenerateParameterText(IBaseElement baseElement, DynamicUIContainer container, string title,
string parameterName, bool isAlwaysUpdate = false)
{
DynamicUIParameterText parameterText = Instantiate(EditorManager.instance.basePrefabs.parameterText, container.rect)
.GetComponent<DynamicUIParameterText>();
parameterText.Initialize(baseElement, title, parameterName);
parameterText.isAlwaysUpdated = isAlwaysUpdate;
container.dynamicUIElements.Add(parameterText);
return parameterText;
}
public DynamicUIEnumDropdown GenerateDropdown(IBaseElement baseElement, DynamicUIContainer container, string title,
Type enumType, string parameterName)
{
DynamicUIEnumDropdown enumDropdown = Instantiate(EditorManager.instance.basePrefabs.enumDropdown, container.rect)
.GetComponent<DynamicUIEnumDropdown>();
enumDropdown.SetUpEnum(enumType);
enumDropdown.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(enumDropdown);
return enumDropdown;
}
public DynamicUIStringListDropdown GenerateDropdown(IBaseElement baseElement, DynamicUIContainer container, string title,
List<string> stringList, string parameterName)
{
DynamicUIStringListDropdown stringListDropdown = Instantiate(EditorManager.instance.basePrefabs.stringListDropdown, container.rect)
.GetComponent<DynamicUIStringListDropdown>();
stringListDropdown.SetUpStringList(stringList);
stringListDropdown.Initialize(baseElement, title, parameterName);
container.dynamicUIElements.Add(stringListDropdown);
return stringListDropdown;
InspectorSecondaryWindow secondaryWindow = Instantiate(EditorManager.instance.basePrefabs.inspectorSecondaryWindow,
inspectorCanvas.transform).GetComponent<InspectorSecondaryWindow>();
secondaryWindow.Initialize(gameElement, title);
return secondaryWindow;
}
}
}

View File

@@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using UnityEngine;
namespace Ichni.Editor
{
public class InspectorSecondaryWindow : MovableWindow, IHaveInspection
{
public GameElement connectedGameElement;
public RectTransform WindowRect { get; set; }
public List<DynamicUIContainer> Containers { get; set; }
public void Initialize(GameElement gameElement, string title)
{
WindowRect = windowRect;
Containers = new List<DynamicUIContainer>();
connectedGameElement = gameElement;
this.title.text = title;
closeButton.onClick.AddListener(() =>
{
Destroy(gameObject);
});
}
}
}

View File

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