Pull up StampedEvent.Temporary. Fix temporary event discarding.

This commit is contained in:
2023-01-31 15:26:13 +08:00
parent c16776aee9
commit 507b656eab
2 changed files with 30 additions and 8 deletions

View File

@@ -109,25 +109,31 @@ namespace Cryville.Crtr.Event {
s.AttachSystems(skin, judge);
}
List<StampedEvent> tempEvents = new List<StampedEvent>();
public void PushTempEvent(StampedEvent ev) {
List<StampedEvent.Temporary> tempEvents = new List<StampedEvent.Temporary>();
public void PushTempEvent(StampedEvent.Temporary ev) {
var index = tempEvents.BinarySearch(ev);
if (index < 0) index = ~index;
tempEvents.Insert(index, ev);
}
readonly StampedEvent _dummyEvent = new StampedEvent();
readonly StampedEvent.Temporary _dummyEvent = new StampedEvent.Temporary();
public void StripTempEvents() {
_dummyEvent.Time = Time;
var index = tempEvents.BinarySearch(_dummyEvent);
if (index < 0) index = ~index;
for (var i = 0; i < index; i++) {
for (var i = index - 1; i >= 0; i--) {
var ev = tempEvents[i];
if (ev.Container != null) {
states[ev.Container].Discard(ev);
tempEvents.RemoveAt(i);
if (ev.CanDiscard) {
if (ev.Container != null) {
states[ev.Container].Discard(ev);
}
}
else {
ev.Time = Time;
PushTempEvent(ev);
}
}
tempEvents.RemoveRange(0, index);
}
public override void ForwardOnceToTime(double toTime) {
@@ -187,6 +193,11 @@ namespace Cryville.Crtr.Event {
public void BroadcastEndUpdate() {
RootState.BroadcastEndUpdate();
foreach (var ev in tempEvents) {
if (ev.Container != null) {
states[ev.Container].Discard(ev);
}
}
tempEvents.Clear();
}