自定义曲线编辑器, Trail界面跟进

This commit is contained in:
SoulliesOfficial
2025-02-28 00:25:23 -05:00
parent 10292f889c
commit 5238cd0e5e
21 changed files with 7294 additions and 118 deletions

View File

@@ -206,12 +206,60 @@ namespace Ichni.Editor
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newFlexibleBool);
};
}
public void SetAsCustomCurve()
{
void GenerateUnit(Keyframe content)
{
DynamicUICustomCurveKeyframeUnit unit = Instantiate(unitPrefab, windowRect).GetComponent<DynamicUICustomCurveKeyframeUnit>();
unitList.Add(unit);
unit.SetUnit(this, content);
}
unitPrefab = EditorManager.instance.basePrefabs.customCurveKeyframeUnit;
AnimationCurve curve = connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement) as AnimationCurve;
List<Keyframe> keyframes = curve.keys.ToList();
WarpModes warpModes = new WarpModes(curve.preWrapMode, curve.postWrapMode);
//生成warpModes的Unit
DynamicUICustomCurveWrapModeUnit warpModesUnit =
Instantiate(EditorManager.instance.basePrefabs.customCurveWrapModeUnit, windowRect).GetComponent<DynamicUICustomCurveWrapModeUnit>();
unitList.Add(warpModesUnit);
warpModesUnit.SetUnit(this, warpModes);
foreach (Keyframe keyframe in keyframes)
{
GenerateUnit(keyframe);
}
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
addNewUnitButton.onClick.AddListener(() =>
{
GenerateUnit(new Keyframe(0, 0, 0, 0));
addNewUnitButton.GetComponent<RectTransform>().SetAsLastSibling();
});
ApplyParameters = () =>
{
AnimationCurve newCurve = new AnimationCurve();
DynamicUICustomCurveWrapModeUnit warpModesUnit = unitList[0] as DynamicUICustomCurveWrapModeUnit;
newCurve.preWrapMode = warpModesUnit.GetValue().preWrapMode;
newCurve.postWrapMode = warpModesUnit.GetValue().postWrapMode;
for(int i = 1; i < unitList.Count; i++)
{
DynamicUICustomCurveKeyframeUnit unit = unitList[i] as DynamicUICustomCurveKeyframeUnit;
newCurve.AddKey(unit.GetValue());
}
connectedBaseElement.GetType().GetField(parameterName).SetValue(connectedBaseElement, newCurve);
};
}
public void Quit()
{
ApplyParameters();
//StartCoroutine(WindowAnim.HidePanel(gameObject, true));
Destroy(gameObject);
}
}
}