HoldVisualMesh 以及快捷键更新

This commit is contained in:
SoulliesOfficial
2025-03-17 21:49:57 -04:00
parent 0e0e820e15
commit 0e22f6ac21
29 changed files with 2222 additions and 333 deletions

View File

@@ -0,0 +1,123 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Dreamteck.Splines;
using Ichni.RhythmGame.Beatmap;
using Ichni.RhythmGame.ThemeBundles.Basic.Beatmap;
using UnityEngine;
using UnityEngine.Serialization;
namespace Ichni.RhythmGame.ThemeBundles.Basic
{
public partial class BasicHoldVisualMesh : NoteVisualBaseHold
{
public MeshGenerator meshGenerator;
public SplinePositioner headPoint, tailPoint;
public static BasicHoldVisualMesh GenerateElement(string elementName, Guid id, List<string> tags,
bool isFirstGenerated, GameElement parentElement, string themeBundleName, string objectName)
{
BasicHoldVisualMesh holdVisualMesh = SubstantialObject.GenerateElement(elementName, id, tags,
isFirstGenerated, themeBundleName, objectName, parentElement).GetComponent<BasicHoldVisualMesh>();
return holdVisualMesh;
}
public override void FirstSetUpObject(bool isFirstGenerated)
{
NoteBase note = parentElement as NoteBase;
if(note == null) throw new System.Exception("NoteVisual只能生成在Note下。");
if(!note.isOnTrack) throw new System.Exception("这种HoldNoteVisual只能生成在Track上。");
this.note = note;
note.noteVisual = this;
this.hold = note as Hold;
this.headPoint = notePartList[0].GetComponent<SplinePositioner>();
this.meshGenerator = notePartList[1].GetComponent<MeshGenerator>();
this.tailPoint = notePartList[2].GetComponent<SplinePositioner>();
headPoint.spline = hold.track.trackPathSubmodule.path;
meshGenerator.spline = hold.track.trackPathSubmodule.path;
tailPoint.spline = hold.track.trackPathSubmodule.path;
TrackTimeSubmoduleMovable trackTimeSubmoduleMovable = hold.track.trackTimeSubmodule as TrackTimeSubmoduleMovable;
float startPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.exactJudgeTime);
float endPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.holdEndTime);
hold.trackPositioner.SetPercent(startPercent);
meshGenerator.SetClipRange(startPercent, endPercent);
headPoint.SetPercent(startPercent);
tailPoint.SetPercent(endPercent);
if (isFirstGenerated)
{
effectSubmodule.effectCollection["Generate"].Add(new BasicNoteGenerateExpand(this));
//effectSubmodule.effectCollection["Holding"].Add(new BasicNoteHoldingExpand(this));
effectSubmodule.effectCollection["Perfect"].Add(new BasicNotePerfectBurst(this));
effectSubmodule.effectCollection["Good"].Add(new BasicNoteGoodBurst(this));
effectSubmodule.effectCollection["Bad"].Add(new BasicNoteBadShrink(this));
effectSubmodule.effectCollection["Miss"].Add(new BasicNoteMissPale(this));
}
}
}
public partial class BasicHoldVisualMesh
{
public override void SaveBM()
{
matchedBM = new BasicHoldVisualTube_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM, themeBundleName, objectName);
}
public override void UpdateHoldInMovableTrack()
{
TrackTimeSubmoduleMovable trackTimeSubmoduleMovable = hold.track.trackTimeSubmodule as TrackTimeSubmoduleMovable;
float startPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.exactJudgeTime);
float endPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.holdEndTime);
if (hold.isHolding)
{
startPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.exactJudgeTime + hold.holdingTime);
endPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.holdEndTime);
}
else if (hold.isFinalJudged)
{
startPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.holdEndTime);
endPercent = trackTimeSubmoduleMovable.GetTrackPercent(hold.holdEndTime);
}
hold.trackPositioner.SetPercent(startPercent);
meshGenerator.SetClipRange(startPercent, endPercent);
headPoint.SetPercent(startPercent);
tailPoint.SetPercent(endPercent);
}
}
namespace Beatmap
{
public class BasicHoldVisualTube_BM : SubstantialObject_BM
{
public BasicHoldVisualTube_BM()
{
}
public BasicHoldVisualTube_BM(string elementName, Guid id, List<string> tags,
GameElement_BM parent, string themeBundleName, string objectName) :
base(elementName, id, tags, parent, themeBundleName, objectName)
{
}
public override void ExecuteBM()
{
matchedElement = BasicHoldVisualMesh.GenerateElement(elementName, elementGuid, tags, false,
GetElement(attachedElementGuid), themeBundleName, objectName);
}
public override GameElement DuplicateBM(GameElement parent)
{
return BasicHoldVisualMesh.GenerateElement(elementName, Guid.NewGuid(), tags, false, parent, themeBundleName, objectName);
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d94f163ef3d384b7eac5af0a344d786d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -48,7 +48,8 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
if (hold.isHolding)
{
float percent = (hold.track.trackTimeSubmodule as TrackTimeSubmoduleMovable).GetTrackPercent(hold.exactJudgeTime + hold.holdingTime);
TrackTimeSubmoduleMovable trackTimeSubmoduleMovable = hold.track.trackTimeSubmodule as TrackTimeSubmoduleMovable;
float percent = trackTimeSubmoduleMovable.GetTrackPercent(hold.exactJudgeTime + hold.holdingTime);
hold.trackPositioner.SetPercent(percent);
}
}

View File

@@ -24,12 +24,27 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
noteVisual.noteMain.SetActive(true);
noteVisual.noteMain.transform.localScale = Vector3.one;
noteMainRenderer.material.SetColor("_BaseColor", Color.white);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(true);
holdVisualMesh.notePartList[2].SetActive(true);
}
}
public override void Adjust()
{
noteMainRenderer.material.DOColor(Color.clear, effectTime).SetEase(Ease.OutQuad);
noteVisual.noteMain.transform.DOScale(Vector3.zero, effectTime).SetEase(Ease.OutQuad).OnComplete(() => noteVisual.noteMain.SetActive(false));
noteVisual.noteMain.transform.DOScale(Vector3.zero, effectTime).SetEase(Ease.OutQuad).OnComplete(() =>
{
noteVisual.noteMain.SetActive(false);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(false);
holdVisualMesh.notePartList[2].SetActive(false);
}
});
}
public override EffectBase_BM ConvertToBM()

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using Dreamteck.Splines;
using Ichni.Editor;
using Ichni.RhythmGame;
using Ichni.RhythmGame.Beatmap;
@@ -24,12 +25,29 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
noteVisual.noteMain.SetActive(false);
noteVisual.noteMain.transform.localScale = Vector3.zero;
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(false);
holdVisualMesh.notePartList[1].GetComponent<MeshGenerator>().size = 0;
holdVisualMesh.notePartList[2].SetActive(false);
holdVisualMesh.notePartList[2].transform.localScale = Vector3.zero;
}
}
public override void Adjust()
{
noteVisual.noteMain.SetActive(true);
noteVisual.noteMain.transform.DOScale(Vector3.one, effectTime).SetEase(Ease.OutBack);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(true);
MeshGenerator meshGenerator = holdVisualMesh.notePartList[1].GetComponent<MeshGenerator>();
DOTween.To(() => meshGenerator.size, x => meshGenerator.size = x, 1, effectTime).SetEase(Ease.OutBack);
holdVisualMesh.notePartList[2].SetActive(true);
holdVisualMesh.notePartList[2].transform.DOScale(Vector3.one, effectTime).SetEase(Ease.OutBack);
}
}
public override EffectBase_BM ConvertToBM()

View File

@@ -27,6 +27,12 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
effectRing.transform.localScale = Vector3.zero;
effectRing.GetComponent<SpriteRenderer>().color = Color.white;
noteVisual.noteMain.SetActive(true);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(true);
holdVisualMesh.notePartList[2].SetActive(true);
}
}
public override void Adjust()
@@ -35,6 +41,12 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
effectRing.transform.DOScale(Vector3.one * 0.5f, effectTime).SetEase(Ease.OutQuad);
effectRing.GetComponent<SpriteRenderer>().DOFade(0, effectTime).SetEase(Ease.OutQuad).OnComplete(() => effectRing.SetActive(false));
noteVisual.noteMain.SetActive(false);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(false);
holdVisualMesh.notePartList[2].SetActive(false);
}
}
public override EffectBase_BM ConvertToBM()

View File

@@ -24,13 +24,27 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
{
noteVisual.noteMain.SetActive(true);
noteMainRenderer.material.SetColor("_BaseColor", Color.white);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(true);
holdVisualMesh.notePartList[2].SetActive(true);
}
}
public override void Adjust()
{
noteVisual.noteMain.SetActive(true);
noteMainRenderer.material.SetColor("_BaseColor", Color.white / 2f);
noteMainRenderer.material.DOColor(Color.clear, effectTime).SetEase(Ease.OutQuad);
noteMainRenderer.material.DOColor(Color.clear, effectTime).SetEase(Ease.OutQuad).OnComplete(() =>
{
noteVisual.noteMain.SetActive(false);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(false);
holdVisualMesh.notePartList[2].SetActive(false);
}
});
}
public override EffectBase_BM ConvertToBM()

View File

@@ -27,6 +27,12 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
effectRing.transform.localScale = Vector3.zero;
effectRing.GetComponent<SpriteRenderer>().color = Color.white;
noteVisual.noteMain.SetActive(true);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(true);
holdVisualMesh.notePartList[2].SetActive(true);
}
}
public override void Adjust()
@@ -35,6 +41,12 @@ namespace Ichni.RhythmGame.ThemeBundles.Basic
effectRing.transform.DOScale(Vector3.one, effectTime).SetEase(Ease.OutQuad);
effectRing.GetComponent<SpriteRenderer>().DOFade(0, effectTime).SetEase(Ease.OutQuad).OnComplete(() => effectRing.SetActive(false));
noteVisual.noteMain.SetActive(false);
if (noteVisual is BasicHoldVisualMesh holdVisualMesh)
{
holdVisualMesh.notePartList[1].SetActive(false);
holdVisualMesh.notePartList[2].SetActive(false);
}
}
public override EffectBase_BM ConvertToBM()