From f9a1ea72fee51c9f3fac36b88ab05de51c61b8ad Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 31 Jan 2023 15:30:27 +0800 Subject: [PATCH] Refactor ReleaseEvent. --- Assets/Cryville/Crtr/Chart.cs | 22 ++++++++-------------- Assets/Cryville/Crtr/Event/EventBatcher.cs | 8 +++++--- Assets/Cryville/Crtr/StampedEvent.cs | 11 +++++------ 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/Assets/Cryville/Crtr/Chart.cs b/Assets/Cryville/Crtr/Chart.cs index 7e5e2ef..ceca7bf 100644 --- a/Assets/Cryville/Crtr/Chart.cs +++ b/Assets/Cryville/Crtr/Chart.cs @@ -130,11 +130,11 @@ namespace Cryville.Crtr { get { return Duration > 0; } } - private InstantEvent relev = null; + private ReleaseEvent relev = null; [JsonIgnore] - public InstantEvent ReleaseEvent { + public ReleaseEvent ReleaseEvent { get { - if (relev == null) relev = new InstantEvent(this, true); + if (relev == null) relev = new ReleaseEvent(this); return relev; } } @@ -161,18 +161,12 @@ namespace Cryville.Crtr { } } - public class InstantEvent : ChartEvent { + public class ReleaseEvent : ChartEvent { public readonly ChartEvent Original; - public bool IsRelease; - public InstantEvent(ChartEvent orig, bool release = false) { - IsRelease = release; - if (orig != null) { - Original = orig; - time = orig.time; - if (IsRelease) - BeatOffset = orig.Duration; - } + public ReleaseEvent(ChartEvent orig) { + Original = orig; + time = orig.endtime; } public override int Priority { @@ -183,7 +177,7 @@ namespace Cryville.Crtr { } public abstract class EventContainer : ChartEvent { public List motions = new List(); - + [JsonIgnore] public Clip Clip { get; private set; } diff --git a/Assets/Cryville/Crtr/Event/EventBatcher.cs b/Assets/Cryville/Crtr/Event/EventBatcher.cs index 1e61c3d..9667c38 100644 --- a/Assets/Cryville/Crtr/Event/EventBatcher.cs +++ b/Assets/Cryville/Crtr/Event/EventBatcher.cs @@ -87,9 +87,11 @@ namespace Cryville.Crtr.Event { stateMap[(EventContainer)ev].StampedContainer = sev; } if (ev is InstantEvent) { - var tev = (InstantEvent)ev; - var pev = map[tev.Original]; - pev.Subevents.Add(sev); + if (ev is ReleaseEvent) { + var tev = (ReleaseEvent)ev; + var oev = tev.Original; + var pev = map[oev]; + pev.ReleaseEvent = sev; sev.Origin = pev; } if (con != null && coevents.Contains(ev)) { diff --git a/Assets/Cryville/Crtr/StampedEvent.cs b/Assets/Cryville/Crtr/StampedEvent.cs index 02a1698..ace588b 100644 --- a/Assets/Cryville/Crtr/StampedEvent.cs +++ b/Assets/Cryville/Crtr/StampedEvent.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using CAnchor = Cryville.Crtr.Anchor; namespace Cryville.Crtr { @@ -9,9 +8,7 @@ namespace Cryville.Crtr { public ChartEvent Unstamped; public EventContainer Container; public StampedEvent Origin; - public List Subevents = new List(); public List Coevents; - private StampedEvent relev = null; public double Duration { get { @@ -47,10 +44,12 @@ namespace Cryville.Crtr { } } + StampedEvent relev = null; public StampedEvent ReleaseEvent { - get { - if (relev == null) relev = Subevents.FirstOrDefault(ev => ((InstantEvent)ev.Unstamped).IsRelease); - return relev; + get { return relev; } + set { + if (relev != null) throw new InvalidOperationException("Release event already set"); + relev = value; } }