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( curNote = new NotePlay(
curTime, mb, curTime, mb,
chartNote.Item2.position, chartNote.Item2.size, chartNote.Item2.position, chartNote.Item2.size,
type: NotePlayType.HoldMid, type: chartNote.Item2.value == "1" ? NotePlayType.HoldMid : NotePlayType.HoldMidInvis,
holdIndex: chartNote.Item2.holdIdx, holdIndex: chartNote.Item2.holdIdx,
holdNext: chartNote.Item2.holdNextIdx holdNext: chartNote.Item2.holdNextIdx
); );
@@ -244,14 +244,14 @@ namespace WacK.Data.Chart
{ {
curHoldNote[np.holdIdx].points[curTime] = np; curHoldNote[np.holdIdx].points[curTime] = np;
} }
else // else
{ // {
if (!playNotes.ContainsKey(curTime)) if (!playNotes.ContainsKey(curTime))
{ {
playNotes[curTime] = new List<NotePlay>(); playNotes[curTime] = new List<NotePlay>();
} }
playNotes[curTime].Add(np); playNotes[curTime].Add(np);
} // }
} }
// NoteEvent<float> -- tempo changes // NoteEvent<float> -- tempo changes
+1
View File
@@ -7,6 +7,7 @@ namespace WacK.Data.Chart
Touch, Touch,
HoldStart, HoldStart,
HoldMid, HoldMid,
HoldMidInvis,
HoldEnd, HoldEnd,
Chain, Chain,
SnapIn, 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))); 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; ++playableNoteCount;
break; break;
case "10": // hold middle case "10": // hold middle; value = should draw?
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))); 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; break;
case "11": // hold end 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))); 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.Linq;
using System.Reflection.Metadata; using System.Reflection.Metadata;
using Godot; using Godot;
@@ -25,11 +26,23 @@ namespace WacK.Things.TunnelObjects
holdScroll.AddChild(longThing); holdScroll.AddChild(longThing);
longThing.Position = new Vector2(0, (float)-holdNoteData.time * Play.ScrollPxPerSec); 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; NotePlay lastHold = holdNoteData;
float segmentPos = 0; float segmentPos = 0;
foreach (var (_, curNote) in holdNoteData.points) foreach (var curNote in drawableMids)
{ {
var curLength = Play.ScrollPxPerSec * (float)(curNote.time - lastHold.time); var curLength = Play.ScrollPxPerSec * (float)(curNote.time - lastHold.time);
var segment = CreateSegment(lastHold, curNote); var segment = CreateSegment(lastHold, curNote);
@@ -42,7 +55,7 @@ namespace WacK.Things.TunnelObjects
} }
else 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!");
} }
} }