fix steppy long note composition
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ namespace WacK.Data.Chart
|
|||||||
Touch,
|
Touch,
|
||||||
HoldStart,
|
HoldStart,
|
||||||
HoldMid,
|
HoldMid,
|
||||||
|
HoldMidInvis,
|
||||||
HoldEnd,
|
HoldEnd,
|
||||||
Chain,
|
Chain,
|
||||||
SnapIn,
|
SnapIn,
|
||||||
|
|||||||
@@ -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)));
|
||||||
|
|||||||
@@ -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!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user