所有Simple UI Element,以及Composite Parameter Window初步

This commit is contained in:
SoulliesOfficial
2025-02-13 02:04:41 -05:00
parent 8d03acc3cb
commit 96a4d620f5
65 changed files with 10696 additions and 75 deletions

View File

@@ -0,0 +1,75 @@
using System.Collections;
using System.Collections.Generic;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace Ichni.Editor
{
public partial class CompositeParameterWindow : MovableWindow
{
public Button addNewUnitButton;
public GameObject unitPrefab;
public IBaseElement connectedBaseElement;
public List<DynamicUICompositeUnit> unitList;
public string parameterName;
public UnityAction ApplyParameters;
public void Initialize(IBaseElement baseElement, string title, string parameterName)
{
this.connectedBaseElement = baseElement;
this.parameterName = parameterName;
this.title.text = title;
unitList = new List<DynamicUICompositeUnit>();
closeButton.onClick.AddListener(() =>
{
ApplyParameters();
Destroy(gameObject);
});
}
public void RemoveUnit(DynamicUICompositeUnit unit)
{
unitList.Remove(unit);
Destroy(unit.gameObject);
}
}
public partial class CompositeParameterWindow
{
public void SetAsStringList()
{
unitPrefab = EditorManager.instance.basePrefabs.stringUnit;
addNewUnitButton.onClick.AddListener(() =>
{
DynamicUIStringUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIStringUnit>();
unitList.Add(unit);
unit.SetUnit(this, "");
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
});
List<string> list = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as List<string>;
foreach (var item in list)
{
DynamicUIStringUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIStringUnit>();
unitList.Add(unit);
unit.SetUnit(this, item);
}
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
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);
};
}
}
}

View File

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

View File

@@ -2,14 +2,17 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices.WindowsRuntime;
using DG.Tweening;
using Ichni.RhythmGame;
using UnityEngine;
using UnityEngine.Events;
namespace Ichni.Editor
{
public partial class Inspector : StaticWindow
{
public GameElement connectedGameElement;
public Canvas inspectorCanvas;
public RectTransform inspectorRect;
public List<DynamicUIContainer> containers;
@@ -23,12 +26,21 @@ namespace Ichni.Editor
containers.Clear();
connectedGameElement = gameElement;
connectedGameElement.SetUpInspector();
}
}
public partial class Inspector
{
public CompositeParameterWindow GenerateCompositeParameterWindow(IBaseElement baseElement, string title, string parameterName, Type parameterType)
{
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 =
@@ -49,6 +61,18 @@ namespace Ichni.Editor
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 DynamicUIInputField GenerateInputField(IBaseElement baseElement, DynamicUIContainer container,
string title, string parameterName)
{
@@ -63,12 +87,32 @@ namespace Ichni.Editor
string title, string parameterName)
{
DynamicUIVector3InputField vector3InputField =
Instantiate(EditorManager.instance.basePrefabs.Vec3inputField, container.rect)
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 DynamicUIText GenerateText(IBaseElement baseElement, DynamicUIContainer container, string title,
string parameterName, bool isAlwaysUpdate = false)