HoldVisualMesh 以及快捷键更新
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d94f163ef3d384b7eac5af0a344d786d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user