From 507b656eab60ad8b22fee3ea6d678d314a7b9401 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 31 Jan 2023 15:26:13 +0800 Subject: [PATCH] Pull up StampedEvent.Temporary. Fix temporary event discarding. --- Assets/Cryville/Crtr/Event/EventBus.cs | 25 ++++++++++++++++++------- Assets/Cryville/Crtr/StampedEvent.cs | 13 ++++++++++++- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/Assets/Cryville/Crtr/Event/EventBus.cs b/Assets/Cryville/Crtr/Event/EventBus.cs index a630832..2b5388e 100644 --- a/Assets/Cryville/Crtr/Event/EventBus.cs +++ b/Assets/Cryville/Crtr/Event/EventBus.cs @@ -109,25 +109,31 @@ namespace Cryville.Crtr.Event { s.AttachSystems(skin, judge); } - List tempEvents = new List(); - public void PushTempEvent(StampedEvent ev) { + List tempEvents = new List(); + 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(); } diff --git a/Assets/Cryville/Crtr/StampedEvent.cs b/Assets/Cryville/Crtr/StampedEvent.cs index a4c30c3..02a1698 100644 --- a/Assets/Cryville/Crtr/StampedEvent.cs +++ b/Assets/Cryville/Crtr/StampedEvent.cs @@ -29,8 +29,19 @@ namespace Cryville.Crtr { } } - public class Anchor : StampedEvent { + public class Temporary : StampedEvent, IComparable { + 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; } }