fix steppy long note composition

This commit is contained in:
msk
2023-10-09 14:28:08 -07:00
parent e285dda54c
commit 3e8013b751
4 changed files with 23 additions and 9 deletions
+4 -4
View File
@@ -163,7 +163,7 @@ namespace WacK.Data.Chart
curNote = new NotePlay(
curTime, mb,
chartNote.Item2.position, chartNote.Item2.size,
type: NotePlayType.HoldMid,
type: chartNote.Item2.value == "1" ? NotePlayType.HoldMid : NotePlayType.HoldMidInvis,
holdIndex: chartNote.Item2.holdIdx,
holdNext: chartNote.Item2.holdNextIdx
);
@@ -244,14 +244,14 @@ namespace WacK.Data.Chart
{
curHoldNote[np.holdIdx].points[curTime] = np;
}
else
{
// else
// {
if (!playNotes.ContainsKey(curTime))
{
playNotes[curTime] = new List<NotePlay>();
}
playNotes[curTime].Add(np);
}
// }
}
// NoteEvent<float> -- tempo changes
+1
View File
@@ -7,6 +7,7 @@ namespace WacK.Data.Chart
Touch,
HoldStart,
HoldMid,
HoldMidInvis,
HoldEnd,
Chain,
SnapIn,
+2 -2
View File
@@ -114,8 +114,8 @@ namespace WacK.Data.Mer
notes[currentMeasure].Add((currentBeat, new MerNote(int.Parse(tokens[5]), int.Parse(tokens[6]), holdIndex: int.Parse(tokens[4]), holdNext: int.Parse(tokens[8]), type: MerType.HoldStart, bonus: true)));
++playableNoteCount;
break;
case "10": // hold middle
notes[currentMeasure].Add((currentBeat, new MerNote(int.Parse(tokens[5]), int.Parse(tokens[6]), holdIndex: int.Parse(tokens[4]), holdNext: int.Parse(tokens[8]), type: MerType.HoldMid)));
case "10": // hold middle; value = should draw?
notes[currentMeasure].Add((currentBeat, new MerNote(int.Parse(tokens[5]), int.Parse(tokens[6]), value: tokens[7],holdIndex: int.Parse(tokens[4]), holdNext: int.Parse(tokens[8]), type: MerType.HoldMid)));
break;
case "11": // hold end
notes[currentMeasure].Add((currentBeat, new MerNote(int.Parse(tokens[5]), int.Parse(tokens[6]), holdIndex: int.Parse(tokens[4]), type: MerType.HoldEnd)));
+16 -3
View File
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using Godot;
@@ -25,11 +26,23 @@ namespace WacK.Things.TunnelObjects
holdScroll.AddChild(longThing);
longThing.Position = new Vector2(0, (float)-holdNoteData.time * Play.ScrollPxPerSec);
if (holdNoteData.points.Count > 0)
// only draw visible hold-mids
var drawableMids = holdNoteData.points.Values.Where(e => e.type == NotePlayType.HoldMid).ToList();
if (drawableMids.Count > 0)
{
var lastMid = holdNoteData.points.Values[^1];
if (drawableMids[^1] != lastMid) drawableMids.Add(lastMid);
}
else
{
drawableMids = holdNoteData.points.Values.ToList();
}
if (drawableMids.Count() > 0)
{
NotePlay lastHold = holdNoteData;
float segmentPos = 0;
foreach (var (_, curNote) in holdNoteData.points)
foreach (var curNote in drawableMids)
{
var curLength = Play.ScrollPxPerSec * (float)(curNote.time - lastHold.time);
var segment = CreateSegment(lastHold, curNote);
@@ -42,7 +55,7 @@ namespace WacK.Things.TunnelObjects
}
else
{
GD.PrintErr("Tried to create a long note with no segments!");
GD.PrintErr("Tried to create a Hold note's long with no drawable segments!");
}
}