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];
tempEvents.RemoveAt(i);
if (ev.CanDiscard) {
if (ev.Container != null) {
states[ev.Container].Discard(ev);
}
}
tempEvents.RemoveRange(0, index);
else {
ev.Time = Time;
PushTempEvent(ev);
}
}
}
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();
}

View File

@@ -29,8 +29,19 @@ namespace Cryville.Crtr {
}
}
public class Anchor : StampedEvent {
public class Temporary : StampedEvent, IComparable<Temporary> {
public bool CanDiscard;
public int CompareTo(Temporary other) {
return base.CompareTo(other);
}
}
public class Anchor : Temporary {
public CAnchor Target;
int m_priority;
public override int Priority { get { return m_priority; } }
public void SetPriority(int value) { m_priority = value; }
}
public override int Priority {
get { return 0; }
}