GraphicEditor基本完成
不过还有优化空间 TODO: 用整个的Rawimage贴图替换beatline
This commit is contained in:
@@ -6,18 +6,20 @@ using Ichni;
|
||||
using Ichni.Editor;
|
||||
using Ichni.RhythmGame;
|
||||
using Sirenix.OdinInspector;
|
||||
using Sirenix.Utilities;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
using UnityEngine.InputSystem;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public partial class GraphicalFlexibleFloatWindow : MovableWindow
|
||||
{
|
||||
public Button addNewUnitButton;
|
||||
|
||||
public FlexibleFloatTab unitPrefab;
|
||||
public IBaseElement connectedBaseElement;
|
||||
public List<FlexibleFloatTab> unitList;
|
||||
public string parameterName;
|
||||
|
||||
public UnityAction ApplyParameters;
|
||||
|
||||
|
||||
@@ -27,31 +29,34 @@ public partial class GraphicalFlexibleFloatWindow : MovableWindow
|
||||
public float timePerBeat => 60f / EditorManager.instance.songInformation.bpm;
|
||||
|
||||
public int BeatDeviver = 100;
|
||||
public int BeatNextDeviver = 1;
|
||||
public void Initialize(IBaseElement baseElement, string title, FlexibleFloat[] FlexibleFloats, string[] Subtitles)
|
||||
{
|
||||
|
||||
scalevalue = 5;
|
||||
transform.localScale = Vector3.zero;
|
||||
this.connectedBaseElement = baseElement;
|
||||
this.title.text = title;
|
||||
unitList = new List<FlexibleFloatTab>();
|
||||
for (int i = 0; i <= FlexibleFloats.Length - 1; i++)
|
||||
{
|
||||
AddUnit(FlexibleFloats[i], Subtitles[i]);
|
||||
}
|
||||
|
||||
|
||||
closeButton.onClick.AddListener(Quit);
|
||||
StartCoroutine(WindowAnim.ShowPanelOnScale(gameObject));
|
||||
for (int i = 0; i <= FlexibleFloats.Length - 1; i++)
|
||||
{
|
||||
ClipBoard.Add(Subtitles[i], new List<AnimatedFloat>());
|
||||
AddUnit(FlexibleFloats[i], Subtitles[i]);
|
||||
}
|
||||
|
||||
ApplyParameters = () =>
|
||||
{
|
||||
|
||||
|
||||
for (int i = 0; i <= unitList.Count - 1; i++)
|
||||
{
|
||||
unitList[i].flexibleFloat.Sort();
|
||||
unitList[i].connectFloat.Sort();
|
||||
}
|
||||
//Dangered
|
||||
//connectedBaseElement.SetParameter(parameterName, unitList.Select(unit => unit.flexibleFloat).ToArray());
|
||||
|
||||
};
|
||||
XDeviverScale("1");
|
||||
}
|
||||
public void AddUnit(FlexibleFloat flexibleFloat, string Subtitle)
|
||||
{
|
||||
@@ -82,6 +87,26 @@ public partial class GraphicalFlexibleFloatWindow : MovableWindow
|
||||
i.CurveScale(value);
|
||||
}
|
||||
}
|
||||
public void DeviverScale(string Rawvalue)
|
||||
{
|
||||
if (ConnectedPoint != null) ConnectedPoint.UpLoad();
|
||||
BeatDeviver = int.Parse(Rawvalue);
|
||||
ChangeValue();
|
||||
for (int i = unitList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
unitList[i].Initialize(unitList[i].connectFloat, unitList[i].Title);
|
||||
}
|
||||
XDeviverScale(BeatNextDeviver.ToString());
|
||||
|
||||
}
|
||||
public void XDeviverScale(string Rawvalue)
|
||||
{
|
||||
BeatNextDeviver = int.Parse(Rawvalue);
|
||||
foreach (FlexibleFloatTab i in unitList)
|
||||
{
|
||||
i.XbeatCnange(BeatNextDeviver);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public partial class GraphicalFlexibleFloatWindow
|
||||
@@ -106,6 +131,7 @@ public partial class GraphicalFlexibleFloatWindow
|
||||
{
|
||||
ConnectedPoint.LastEventPoint.NextEventPoint = ConnectedPoint.NextEventPoint;
|
||||
if (ConnectedPoint.LastEventPoint.NextEventPoint != null) ConnectedPoint.LastEventPoint.NextEventPoint.ReDraw(scalevalue);
|
||||
ConnectedPoint.LastEventPoint.ReDraw(scalevalue);
|
||||
}
|
||||
|
||||
if (ConnectedPoint.NextEventPoint != null)
|
||||
@@ -123,6 +149,8 @@ public partial class GraphicalFlexibleFloatWindow
|
||||
}
|
||||
}
|
||||
public void ChangeValue()
|
||||
|
||||
|
||||
{
|
||||
if (ConnectedPoint != null)
|
||||
{
|
||||
@@ -140,4 +168,49 @@ public partial class GraphicalFlexibleFloatWindow
|
||||
ConnectedPoint.ReDraw(scalevalue);
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, List<AnimatedFloat>> ClipBoard = new();
|
||||
public float MinCopyTime = 0f;
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (Keyboard.current.shiftKey.isPressed && Keyboard.current.vKey.wasPressedThisFrame)
|
||||
{
|
||||
Paste();
|
||||
}
|
||||
}
|
||||
public void Paste()
|
||||
{
|
||||
float time = unitList[0].GetBeat();
|
||||
print(time);
|
||||
FindMinStartTime();
|
||||
foreach (KeyValuePair<string, List<AnimatedFloat>> i in ClipBoard)
|
||||
{
|
||||
foreach (AnimatedFloat j in i.Value)
|
||||
{
|
||||
AnimatedFloat newone = new AnimatedFloat(j.startTime, j.endTime, j.startValue, j.endValue, j.animationCurveType)
|
||||
{
|
||||
startTime = j.startTime - MinCopyTime + time,
|
||||
endTime = j.endTime - MinCopyTime + time
|
||||
};
|
||||
|
||||
unitList.Find(x => x.Title == i.Key).SpawnEvent(newone);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void FindMinStartTime()
|
||||
{
|
||||
MinCopyTime = float.MaxValue;
|
||||
foreach (var list in ClipBoard.Values)
|
||||
{
|
||||
foreach (var animatedFloat in list)
|
||||
{
|
||||
if (animatedFloat.startTime < MinCopyTime)
|
||||
{
|
||||
MinCopyTime = animatedFloat.startTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user