Modify priority logic for normal/temporary events.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
namespace Cryville.Crtr.Event {
|
namespace Cryville.Crtr.Event {
|
||||||
public class EventBus : StateBase<EventBatch>, IDisposable {
|
public class EventBus : StateBase<EventBatch>, IDisposable {
|
||||||
@@ -120,6 +121,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
var batch = Events[EventId];
|
var batch = Events[EventId];
|
||||||
for (var i = 0; i < batch.Count; i++) {
|
for (var i = 0; i < batch.Count; i++) {
|
||||||
var ev = batch[i];
|
var ev = batch[i];
|
||||||
|
HandleTempEvents(time0, ev.Priority);
|
||||||
if (ev is StampedEvent.ClipBehind) {
|
if (ev is StampedEvent.ClipBehind) {
|
||||||
var cevs = ev.Origin.Coevents;
|
var cevs = ev.Origin.Coevents;
|
||||||
if (cevs != null) foreach (var cev in cevs) {
|
if (cevs != null) foreach (var cev in cevs) {
|
||||||
@@ -137,16 +139,7 @@ namespace Cryville.Crtr.Event {
|
|||||||
}
|
}
|
||||||
EventId++;
|
EventId++;
|
||||||
}
|
}
|
||||||
if (time2 == time0) {
|
HandleTempEvents(time0);
|
||||||
while (tempEvents.Count > 0) {
|
|
||||||
var ev = tempEvents[0];
|
|
||||||
if (ev.Time != time0) break;
|
|
||||||
if (ev.Container != null) {
|
|
||||||
states[ev.Container].Handle(ev);
|
|
||||||
}
|
|
||||||
tempEvents.RemoveAt(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Time = toTime;
|
Time = toTime;
|
||||||
@@ -154,6 +147,17 @@ namespace Cryville.Crtr.Event {
|
|||||||
}
|
}
|
||||||
ValidateStates();
|
ValidateStates();
|
||||||
}
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
void HandleTempEvents(double time, int maxPriority = int.MaxValue) {
|
||||||
|
while (tempEvents.Count > 0) {
|
||||||
|
var ev2 = tempEvents[0];
|
||||||
|
if (ev2.Time != time || ev2.Priority >= maxPriority) break;
|
||||||
|
if (ev2.Container != null) {
|
||||||
|
states[ev2.Container].Handle(ev2);
|
||||||
|
}
|
||||||
|
tempEvents.RemoveAt(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void ValidateStates() {
|
private void ValidateStates() {
|
||||||
foreach (var s in invalidatedStates)
|
foreach (var s in invalidatedStates)
|
||||||
|
|||||||
Reference in New Issue
Block a user