Files
ichni_Creator_Studio/Assets/Scripts/DynamicUI/Timeline/TimelineTab.cs
TRAfoer a31269c632 fastTracker
Signed-off-by: TRAfoer <lhf190@outlook.com>
2026-01-07 23:48:28 +08:00

98 lines
2.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Ichni;
using Ichni.Editor;
using Ichni.RhythmGame;
using TMPro;
using UnityEditor;
using UnityEngine;
public class TimelineTab : MonoBehaviour
{
public TMP_Text Title;
public IBaseElement connectedElement;
public SubTab ElementPrefab;
public List<IBaseElement> GelementPointer = new();
public RectTransform MoveArea;
public RectTransform title;
public Dictionary<float, SubTab> SubTabs = new();
public int TabIndex;
public Timeline timeline;
public void SetTab(IBaseElement element, Type DisplayType)
{
connectedElement = element;
Title.text = DisplayType.ToString().Split('.').Last();
AddElement(element);
}
public void AddElement(IBaseElement gameElement)
{
if (gameElement == null)
{
return;
}
GelementPointer.Add(gameElement);
if (gameElement is TimeDurationSubmodule suba)
{
var s = AddSubTab(suba, suba.startTime);
AddSubTab(suba, suba.endTime, s.GetComponent<RectTransform>());
}
else if (gameElement is TrackTimeSubmodule sub)
{
if (sub is TrackTimeSubmoduleMovable moveable)
{
var s = AddSubTab(moveable, moveable.trackStartTime);
AddSubTab(moveable, moveable.trackEndTime, s.GetComponent<RectTransform>());
}
}
else if (gameElement is NoteBase)
{
float Judgetime = ((NoteBase)gameElement).exactJudgeTime;
if (SubTabs.ContainsKey(Judgetime))
{
SubTabs[Judgetime].Set(gameElement, Judgetime);
}
else
{
AddSubTab(gameElement, Judgetime);
}
}
else if (gameElement is SkyboxSubsetter skyboxSubsetter)
{
for (int i = 0; i < skyboxSubsetter.blendTimeList.Count; i++)
{
float blendTime = skyboxSubsetter.blendTimeList[i];
if (SubTabs.ContainsKey(blendTime))
{
SubTabs[blendTime].Set(skyboxSubsetter, blendTime);
}
else
{
AddSubTab(skyboxSubsetter, blendTime);
}
}
}
}
private SubTab AddSubTab(IBaseElement element, float time, RectTransform anotherTab = null)
{
SubTab subTab = Instantiate(ElementPrefab, MoveArea.transform);
subTab.father = this;
subTab.Set(element, time, anotherTab);
SubTabs.Add(time, subTab);
return subTab;
}
private void Start()
{
timeline = EditorManager.instance.uiManager.timeline;
}
}