Timing boogaloo

This commit is contained in:
zumorica
2020-05-21 00:26:43 +02:00
parent 6db9ac7247
commit 1e36851dde

View File

@@ -123,7 +123,14 @@ namespace Content.Client.GameObjects.Components.Instruments
protected void EndRenderer() protected void EndRenderer()
{ {
Timer.Spawn(1000, () => { _renderer?.Dispose(); }); if (IsInputOpen)
CloseInput();
if (IsMidiOpen)
CloseMidi();
var renderer = _renderer;
Timer.Spawn(1000, () => { renderer?.Dispose(); });
_renderer = null; _renderer = null;
_midiQueue.Clear(); _midiQueue.Clear();
} }
@@ -149,13 +156,15 @@ namespace Content.Client.GameObjects.Components.Instruments
case InstrumentMidiEventMessage midiEventMessage: case InstrumentMidiEventMessage midiEventMessage:
// If we're the ones sending the MidiEvents, we ignore this message. // If we're the ones sending the MidiEvents, we ignore this message.
if (!IsRendererAlive || IsInputOpen || IsMidiOpen) break; if (!IsRendererAlive || IsInputOpen || IsMidiOpen) break;
var curTime = _gameTiming.CurTime;
Logger.Info($"NEW BATCH!!! LENGTH:{midiEventMessage.MidiEvent.Length} QUEUED:{_midiQueue.Count} LAST:{_lastEvent}"); Logger.Info($"NEW BATCH!!! LENGTH:{midiEventMessage.MidiEvent.Length} QUEUED:{_midiQueue.Count} LAST:{_lastEvent}");
for (var i = 0; i < midiEventMessage.MidiEvent.Length; i++) for (var i = 0; i < midiEventMessage.MidiEvent.Length; i++)
{ {
var ev = midiEventMessage.MidiEvent[i]; var ev = midiEventMessage.MidiEvent[i];
var delta = i != 0 ? var delta = i != 0 ?
ev.Timestamp.Subtract(midiEventMessage.MidiEvent[i-1].Timestamp) : _lastEvent.HasValue ? ev.Timestamp.Subtract(_lastEvent.Value) : TimeSpan.Zero; ev.Timestamp.Subtract(midiEventMessage.MidiEvent[i-1].Timestamp) : _lastEvent.HasValue ? ev.Timestamp.Subtract(_lastEvent.Value) : TimeSpan.Zero;
ev.Timestamp = _gameTiming.CurTime + delta + TimeSpan.FromSeconds(TimeBetweenNetMessages*1.25); ev.Timestamp = curTime + TimeSpan.FromSeconds(TimeBetweenNetMessages*1.25);
Logger.Info($"DT:{delta} TIM:{ev.Timestamp} TIMR:{midiEventMessage.MidiEvent[i].Timestamp} LST:{midiEventMessage.MidiEvent[Math.Max(0, i-1)].Timestamp}");
_midiQueue.Enqueue(ev); _midiQueue.Enqueue(ev);
_lastEvent = ev.Timestamp; _lastEvent = ev.Timestamp;
@@ -169,7 +178,6 @@ namespace Content.Client.GameObjects.Components.Instruments
break; break;
case InstrumentStopMidiMessage _: case InstrumentStopMidiMessage _:
_renderer?.StopAllNotes();
EndRenderer(); EndRenderer();
break; break;
@@ -269,7 +277,7 @@ namespace Content.Client.GameObjects.Components.Instruments
if (_renderer == null || _midiQueue.Count == 0) return; if (_renderer == null || _midiQueue.Count == 0) return;
var midiEvent = _midiQueue.Dequeue(); var midiEvent = _midiQueue.Dequeue();
_renderer.SendMidiEvent(midiEvent); _renderer.SendMidiEvent(midiEvent);
_timer = _midiQueue.Count != 0 ? (MathF.Max((float) midiEvent.Timestamp.Subtract(_gameTiming.CurTime).TotalSeconds, 0f)) : 0; _timer = _midiQueue.Count != 0 ? (MathF.Max((float) _midiQueue.Peek().Timestamp.Subtract(_gameTiming.CurTime).TotalSeconds, 0f)) : 0;
if (_timer <= 0f) continue; if (_timer <= 0f) continue;
break; break;
} }