三种动画参数的Composite Unit
This commit is contained in:
@@ -1,18 +1,38 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Ichni.RhythmGame;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class DynamicUIAnimatedBoolUnit : MonoBehaviour
|
||||
namespace Ichni.Editor
|
||||
{
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
public class DynamicUIAnimatedBoolUnit : DynamicUICompositeUnit
|
||||
{
|
||||
public TMP_InputField timeInputField;
|
||||
public Toggle valueToggle;
|
||||
|
||||
}
|
||||
public override void SetUnit(CompositeParameterWindow window, object itemContent)
|
||||
{
|
||||
compositeParameterWindow = window;
|
||||
|
||||
AnimatedBool animatedBool = (AnimatedBool)itemContent;
|
||||
timeInputField.text = animatedBool.time.ToString();
|
||||
valueToggle.isOn = animatedBool.value;
|
||||
|
||||
timeInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
valueToggle.onValueChanged.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
removeButton.onClick.AddListener(() =>
|
||||
{
|
||||
compositeParameterWindow.RemoveUnit(this);
|
||||
compositeParameterWindow.ApplyParameters();
|
||||
});
|
||||
}
|
||||
|
||||
public AnimatedBool GetValue()
|
||||
{
|
||||
return new AnimatedBool(float.Parse(timeInputField.text), valueToggle.isOn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,54 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Ichni.RhythmGame;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
|
||||
public class DynamicUIAnimatedFloatUnit : MonoBehaviour
|
||||
namespace Ichni.Editor
|
||||
{
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
public class DynamicUIAnimatedFloatUnit : DynamicUICompositeUnit
|
||||
{
|
||||
public TMP_InputField startTimeInputField;
|
||||
public TMP_InputField endTimeInputField;
|
||||
public TMP_InputField startValueInputField;
|
||||
public TMP_InputField endValueInputField;
|
||||
public TMP_Dropdown animationCurveTypeDropdown;
|
||||
|
||||
}
|
||||
public override void SetUnit(CompositeParameterWindow window, object itemContent)
|
||||
{
|
||||
compositeParameterWindow = window;
|
||||
|
||||
AnimatedFloat animatedFloat = (AnimatedFloat)itemContent;
|
||||
startTimeInputField.text = animatedFloat.startTime.ToString();
|
||||
endTimeInputField.text = animatedFloat.endTime.ToString();
|
||||
startValueInputField.text = animatedFloat.startValue.ToString();
|
||||
endValueInputField.text = animatedFloat.endValue.ToString();
|
||||
animationCurveTypeDropdown.ClearOptions();
|
||||
List<string> enumNameList = System.Enum.GetNames(typeof(AnimationCurveType)).ToList();
|
||||
animationCurveTypeDropdown.AddOptions(enumNameList);
|
||||
animationCurveTypeDropdown.value = (int)animatedFloat.animationCurveType;
|
||||
|
||||
|
||||
startTimeInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
endTimeInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
startValueInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
endValueInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
animationCurveTypeDropdown.onValueChanged.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
|
||||
removeButton.onClick.AddListener(() =>
|
||||
{
|
||||
compositeParameterWindow.RemoveUnit(this);
|
||||
compositeParameterWindow.ApplyParameters();
|
||||
});
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
|
||||
public AnimatedFloat GetValue()
|
||||
{
|
||||
return new AnimatedFloat(float.Parse(startTimeInputField.text), float.Parse(endTimeInputField.text),
|
||||
float.Parse(startValueInputField.text), float.Parse(endValueInputField.text),
|
||||
(AnimationCurveType)animationCurveTypeDropdown.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,18 +1,37 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Ichni.RhythmGame;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
public class DynamicUIAnimatedIntUnit : MonoBehaviour
|
||||
namespace Ichni.Editor
|
||||
{
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
public class DynamicUIAnimatedIntUnit : DynamicUICompositeUnit
|
||||
{
|
||||
public TMP_InputField timeInputField;
|
||||
public TMP_InputField valueInputField;
|
||||
|
||||
}
|
||||
public override void SetUnit(CompositeParameterWindow window, object itemContent)
|
||||
{
|
||||
compositeParameterWindow = window;
|
||||
|
||||
AnimatedInt animatedInt = (AnimatedInt)itemContent;
|
||||
timeInputField.text = animatedInt.time.ToString();
|
||||
valueInputField.text = animatedInt.value.ToString();
|
||||
|
||||
timeInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
valueInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
|
||||
// Update is called once per frame
|
||||
void Update()
|
||||
{
|
||||
removeButton.onClick.AddListener(() =>
|
||||
{
|
||||
compositeParameterWindow.RemoveUnit(this);
|
||||
compositeParameterWindow.ApplyParameters();
|
||||
});
|
||||
}
|
||||
|
||||
public AnimatedInt GetValue()
|
||||
{
|
||||
return new AnimatedInt(float.Parse(timeInputField.text), int.Parse(valueInputField.text));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,6 @@ namespace Ichni.Editor
|
||||
{
|
||||
public CompositeParameterWindow compositeParameterWindow;
|
||||
public Button removeButton;
|
||||
public abstract void SetUnit(CompositeParameterWindow list, object itemContent);
|
||||
public abstract void SetUnit(CompositeParameterWindow window, object itemContent);
|
||||
}
|
||||
}
|
||||
@@ -10,9 +10,9 @@ namespace Ichni.Editor
|
||||
{
|
||||
public TMP_InputField stringInputField;
|
||||
|
||||
public override void SetUnit(CompositeParameterWindow list, object itemContent)
|
||||
public override void SetUnit(CompositeParameterWindow window, object itemContent)
|
||||
{
|
||||
compositeParameterWindow = list;
|
||||
compositeParameterWindow = window;
|
||||
stringInputField.text = (string)itemContent;
|
||||
stringInputField.onEndEdit.AddListener(_ => compositeParameterWindow.ApplyParameters());
|
||||
removeButton.onClick.AddListener(() =>
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace Ichni.Editor
|
||||
|
||||
public void SetUpEnum(Type enumType)
|
||||
{
|
||||
dropdown.options.Clear();
|
||||
dropdown.ClearOptions();
|
||||
List<string> enumNameList = System.Enum.GetNames(enumType).ToList();
|
||||
dropdown.AddOptions(enumNameList);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Ichni.Editor
|
||||
public string parameterName;
|
||||
|
||||
/// <summary>
|
||||
/// 是否始终更新,如果子类可能用到此变量,则在子类中写Update即可
|
||||
/// 是否始终更新,如果子类可能用到此变量,则在子类中写Update即可(注意,如果最后仅有Text用到此变量,直接移动它到Text即可)
|
||||
/// </summary>
|
||||
public bool isAlwaysUpdated;
|
||||
|
||||
|
||||
@@ -40,26 +40,32 @@ namespace Ichni.Editor
|
||||
{
|
||||
public void SetAsStringList()
|
||||
{
|
||||
unitPrefab = EditorManager.instance.basePrefabs.stringUnit;
|
||||
addNewUnitButton.onClick.AddListener(() =>
|
||||
//生成Unit
|
||||
void GenerateUnit(string content)
|
||||
{
|
||||
DynamicUIStringUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIStringUnit>();
|
||||
unitList.Add(unit);
|
||||
unit.SetUnit(this, "");
|
||||
unit.SetUnit(this, content);
|
||||
}
|
||||
|
||||
unitPrefab = EditorManager.instance.basePrefabs.stringUnit;
|
||||
|
||||
//初始化:获取当前的List<string>,并生成对应的Unit
|
||||
List<string> list = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as List<string>;
|
||||
foreach (string item in list)
|
||||
{
|
||||
GenerateUnit(item);
|
||||
}
|
||||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||||
|
||||
//为添加新的Unit的按钮设置点击事件
|
||||
addNewUnitButton.onClick.AddListener(() =>
|
||||
{
|
||||
GenerateUnit("");
|
||||
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();
|
||||
|
||||
//将当前所有Unit的值应用到对应的变量中
|
||||
ApplyParameters = () =>
|
||||
{
|
||||
List<string> list = new List<string>();
|
||||
@@ -71,5 +77,40 @@ namespace Ichni.Editor
|
||||
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, list);
|
||||
};
|
||||
}
|
||||
|
||||
public void SetAsFlexibleFloat()
|
||||
{
|
||||
void GenerateUnit(AnimatedFloat content)
|
||||
{
|
||||
DynamicUIAnimatedFloatUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUIAnimatedFloatUnit>();
|
||||
unitList.Add(unit);
|
||||
unit.SetUnit(this, content);
|
||||
}
|
||||
|
||||
unitPrefab = EditorManager.instance.basePrefabs.animatedFloatUnit;
|
||||
|
||||
FlexibleFloat flexibleFloat = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as FlexibleFloat;
|
||||
foreach (AnimatedFloat animatedFloat in flexibleFloat.animations)
|
||||
{
|
||||
GenerateUnit(animatedFloat);
|
||||
}
|
||||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||||
|
||||
addNewUnitButton.onClick.AddListener(() =>
|
||||
{
|
||||
GenerateUnit(new AnimatedFloat(0, 0, 0, 0, AnimationCurveType.Linear));
|
||||
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
|
||||
});
|
||||
|
||||
ApplyParameters = () =>
|
||||
{
|
||||
FlexibleFloat newFlexibleFloat = new FlexibleFloat();
|
||||
foreach (var unit in unitList)
|
||||
{
|
||||
newFlexibleFloat.animations.Add((unit as DynamicUIAnimatedFloatUnit).GetValue());
|
||||
}
|
||||
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleFloat);
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ namespace Ichni.Editor
|
||||
|
||||
public partial class Inspector
|
||||
{
|
||||
public CompositeParameterWindow GenerateCompositeParameterWindow(IBaseElement baseElement, string title, string parameterName, Type parameterType)
|
||||
public CompositeParameterWindow GenerateCompositeParameterWindow(IBaseElement baseElement, string title, string parameterName)
|
||||
{
|
||||
CompositeParameterWindow compositeParameterWindow =
|
||||
Instantiate(EditorManager.instance.basePrefabs.compositeParameterWindow,
|
||||
|
||||
Reference in New Issue
Block a user