TimeLine大改

Signed-off-by: TRAfoer <lhf190@outlook.com>
This commit is contained in:
2025-07-18 18:43:09 +08:00
parent fc3b4d7207
commit 1b5084626d
29 changed files with 16837 additions and 17453 deletions

View File

@@ -79,75 +79,73 @@ namespace Ichni.RhythmGame
}
protected virtual void Update()
{
if (isOnTrack)
var editor = EditorManager.instance;
var cameraManager = editor.cameraManager;
float songTime = editor.songInformation.songTime;
// 轨道位置更新
if (isOnTrack && track.trackTimeSubmodule is TrackTimeSubmoduleStatic)
{
if (track.trackTimeSubmodule is TrackTimeSubmoduleStatic)
{
UpdateNoteInStaticTrack();
}
UpdateNoteInStaticTrack();
}
float songTime = EditorManager.instance.songInformation.songTime;
// 判定状态更新
if (isFirstJudged && songTime < exactJudgeTime)
{
isFirstJudged = false;
}
if (!isFirstJudged && songTime >= exactJudgeTime)
else if (!isFirstJudged && songTime >= exactJudgeTime)
{
if (!isFirstJudged)
noteAudioSubmodule?.PlayNoteJudgeAudios(editor.currentJudgeType);
isFirstJudged = true;
}
// 判定单元更新
if (noteJudgeSubmodule != null && !cameraManager.isSceneCameraActive)
{
foreach (var unit in noteJudgeSubmodule.judgeUnitList)
{
noteAudioSubmodule.PlayNoteJudgeAudios(EditorManager.instance.currentJudgeType);
isFirstJudged = true;
}
}
if (noteJudgeSubmodule != null && !EditorManager.instance.cameraManager.isSceneCameraActive)
{
foreach (NoteJudgeUnit unit in noteJudgeSubmodule.judgeUnitList.Where(unit => unit.isShowingJudge))
{
unit.UpdateJudge();
if (unit.isShowingJudge) unit.UpdateJudge();
}
}
// 视觉效果更新
if (noteVisual != null)
{
noteVisual.effectSubmodule.effectCollection["Generate"].ForEach(e => e.UpdateEffect(exactJudgeTime));
noteVisual.effectSubmodule.effectCollection["GeneralJudge"].ForEach(e => e.UpdateEffect(exactJudgeTime));
var effects = noteVisual.effectSubmodule.effectCollection;
UpdateEffectList(effects["Generate"]);
UpdateEffectList(effects["GeneralJudge"]);
switch (EditorManager.instance.currentJudgeType)
switch (editor.currentJudgeType)
{
case NoteJudgeType.Perfect:
noteVisual.effectSubmodule.effectCollection["Perfect"].ForEach(e => e.UpdateEffect(exactJudgeTime));
break;
case NoteJudgeType.Good:
noteVisual.effectSubmodule.effectCollection["Good"].ForEach(e => e.UpdateEffect(exactJudgeTime));
break;
case NoteJudgeType.Bad:
noteVisual.effectSubmodule.effectCollection["Bad"].ForEach(e => e.UpdateEffect(exactJudgeTime));
break;
case NoteJudgeType.Miss:
noteVisual.effectSubmodule.effectCollection["Miss"].ForEach(e => e.UpdateEffect(exactJudgeTime));
break;
case NoteJudgeType.Perfect: UpdateEffectList(effects["Perfect"]); break;
case NoteJudgeType.Good: UpdateEffectList(effects["Good"]); break;
case NoteJudgeType.Bad: UpdateEffectList(effects["Bad"]); break;
case NoteJudgeType.Miss: UpdateEffectList(effects["Miss"]); break;
}
noteVisual.effectSubmodule.effectCollection["AfterJudge"].ForEach(e => e.UpdateEffect(exactJudgeTime));
UpdateEffectList(effects["AfterJudge"]);
if (EditorManager.instance.cameraManager.haveGameCamera)
// 屏幕位置更新(降低频率)
if (cameraManager.haveGameCamera)//&& Time.frameCount % 3 == 0)
{
noteScreenPosition = EditorManager.instance.cameraManager.gameCamera.gameCamera.WorldToScreenPoint(noteVisual.transform.position);
noteScreenPosition = cameraManager.gameCamera.gameCamera.WorldToScreenPoint(
noteVisual.transform.position);
}
}
//Editor
if (noteVisual != null)
{
// 碰撞体状态
noteVisual.GetComponent<Collider>().enabled = !isFirstJudged;
}
}
// 辅助方法:更新效果列表
private void UpdateEffectList(List<EffectBase> effects)
{
for (int i = 0; i < effects.Count; i++)
{
effects[i].UpdateEffect(exactJudgeTime);
}
}
public void ExecuteStartJudge()
{