Pull up StampedEvent.Temporary. Fix temporary event discarding.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user