Skip to content

Commit c7c452e

Browse files
committed
changed notes into a grid pattern with a short fade timer
1 parent 7fd5198 commit c7c452e

3 files changed

Lines changed: 66 additions & 20 deletions

File tree

NoteSliceVisualizer/Plugin.cs

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class Plugin : IBeatSaberPlugin
99
ColorManager _colorManager;
1010
BeatmapObjectSpawnController _spawnController;
1111

12-
SliceController[] _sliceControllers;
12+
SliceController[,] _sliceControllers;
1313
bool _logNotesCut = false;
1414

1515
private void MenuSceneLoadedFresh()
@@ -23,30 +23,36 @@ private void GameSceneLoaded()
2323
_spawnController = GameObject.FindObjectOfType<BeatmapObjectSpawnController>();
2424
_spawnController.noteWasCutEvent += OnNoteCut;
2525

26-
GameObject canvasA = AssetBundleHelper.Instantiate("Canvas");
27-
GameObject canvasB = AssetBundleHelper.Instantiate("Canvas");
28-
29-
canvasA.transform.Translate(-1.5f, 0f, 0f);
30-
canvasB.transform.Translate(1.5f, 0f, 0f);
31-
32-
Color colorNoteA = _colorManager.ColorForNoteType(NoteType.NoteA);
3326
Color colorNoteB = _colorManager.ColorForNoteType(NoteType.NoteB);
3427

35-
Console.WriteLine($"[NoteSliceVisualizer] Color NoteA: {colorNoteA}");
36-
Console.WriteLine($"[NoteSliceVisualizer] Color NoteB: {colorNoteB}");
37-
38-
_sliceControllers = new SliceController[]
28+
GameObject[,] canvases = new GameObject[4, 3];
29+
_sliceControllers = new SliceController[4, 3];
30+
for (int x = 0; x < 4; ++x)
3931
{
40-
new SliceController(canvasA, colorNoteA),
41-
new SliceController(canvasB, colorNoteB),
42-
};
32+
for (int y = 0; y < 3; ++y)
33+
{
34+
GameObject canvas = canvases[x, y];
35+
36+
float xPos = -1.2f + (0.8f * x);
37+
float yPos = 0f + (0.8f * y) - 1.5f;
38+
39+
canvas = AssetBundleHelper.Instantiate("Canvas");
40+
canvas.transform.localScale *= 0.25f;
41+
canvas.transform.Translate(xPos, yPos, 0f);
42+
_sliceControllers[x, y] = new SliceController(canvas);
43+
}
44+
}
4345
}
4446

4547
private void OnNoteCut(BeatmapObjectSpawnController spawnController, INoteController noteController, NoteCutInfo info)
4648
{
4749
Vector3 center = noteController.noteTransform.position;
4850
Vector3 localCutPoint = info.cutPoint - center;
49-
_sliceControllers[(int)info.saberType].UpdateSlice(localCutPoint, info.cutNormal);
51+
52+
NoteData data = noteController.noteData;
53+
SliceController sliceController = _sliceControllers[data.lineIndex, (int)data.noteLineLayer];
54+
sliceController.UpdateBlockColor(_colorManager.ColorForSaberType(info.saberType));
55+
sliceController.UpdateSlice(localCutPoint, info.cutNormal);
5056

5157
if (_logNotesCut)
5258
{
@@ -86,11 +92,19 @@ public void OnActiveSceneChanged(global::UnityEngine.SceneManagement.Scene prevS
8692

8793
public void OnUpdate()
8894
{
95+
if (_sliceControllers != null)
96+
{
97+
foreach (SliceController sliceController in _sliceControllers)
98+
{
99+
sliceController?.Update();
100+
}
101+
}
89102
}
90103

91104
public void OnFixedUpdate()
92105
{
93106
}
107+
94108
#endregion // IBeatSaberPlugin
95109
}
96110
}

NoteSliceVisualizer/SliceController.cs

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,28 @@ class SliceController
99
private float _scale;
1010
private RectTransform _blockTransform;
1111
private RectTransform _sliceTransform;
12+
private RawImage _backgroundImage;
13+
private RawImage _noteSliceImage;
14+
private Color _backgroundColor;
1215

13-
public SliceController(GameObject canvas, Color color)
16+
private const float _fadeTime = 0.3f;
17+
private const float _popTime = 0.1f;
18+
private float _timeSinceSliced = _fadeTime;
19+
20+
public SliceController(GameObject canvas)
1421
{
15-
_sliceTransform = canvas.GetComponentsInChildren<RectTransform>().First(o => o.name == "NoteSlice");
1622
_blockTransform = canvas.GetComponentsInChildren<RectTransform>().First(o => o.name == "Block");
23+
_sliceTransform = canvas.GetComponentsInChildren<RectTransform>().First(o => o.name == "NoteSlice");
1724
_scale = _blockTransform.rect.width;
1825

19-
_blockTransform.GetComponent<RawImage>().color = color;
26+
_backgroundImage = _blockTransform.GetComponent<RawImage>();
27+
_noteSliceImage = _sliceTransform.GetComponent<RawImage>();
28+
_noteSliceImage.color = Color.white;
29+
}
30+
31+
public void UpdateBlockColor(Color color)
32+
{
33+
_backgroundColor = color;
2034
}
2135

2236
public void UpdateSlice(Vector3 cutPoint, Vector3 normal)
@@ -28,7 +42,25 @@ public void UpdateSlice(Vector3 cutPoint, Vector3 normal)
2842
float rot = Mathf.Atan2(normal.y, normal.x) * Mathf.Rad2Deg;
2943

3044
_sliceTransform.localPosition = start;
31-
_sliceTransform.localRotation = Quaternion.Euler(0, 0, rot);
45+
_sliceTransform.localRotation = Quaternion.Euler(0f, 0f, rot);
46+
47+
_timeSinceSliced = 0f;
48+
}
49+
50+
public void Update()
51+
{
52+
float popT = _timeSinceSliced / _popTime;
53+
float fadeT = _timeSinceSliced / _fadeTime;
54+
55+
float r = Mathf.Lerp(_backgroundColor.r * 10, _backgroundColor.r, popT);
56+
float g = Mathf.Lerp(_backgroundColor.g * 10, _backgroundColor.g, popT);
57+
float b = Mathf.Lerp(_backgroundColor.b * 10, _backgroundColor.b, popT);
58+
float a = Mathf.Lerp(1f, 0f, fadeT);
59+
60+
Color color = new Color(r, g, b, a);
61+
_backgroundImage.color = color;
62+
63+
_timeSinceSliced += Time.deltaTime;
3264
}
3365
}
3466
}
2.5 KB
Binary file not shown.

0 commit comments

Comments
 (0)