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();
|
||||
}
|
||||
|
||||
|
@@ -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; }
|
||||
}
|
||||
|
Reference in New Issue
Block a user