Refactor ReleaseEvent.

This commit is contained in:
2023-01-31 15:30:27 +08:00
parent 507b656eab
commit f9a1ea72fe
3 changed files with 18 additions and 23 deletions

View File

@@ -130,11 +130,11 @@ namespace Cryville.Crtr {
get { return Duration > 0; } get { return Duration > 0; }
} }
private InstantEvent relev = null; private ReleaseEvent relev = null;
[JsonIgnore] [JsonIgnore]
public InstantEvent ReleaseEvent { public ReleaseEvent ReleaseEvent {
get { get {
if (relev == null) relev = new InstantEvent(this, true); if (relev == null) relev = new ReleaseEvent(this);
return relev; return relev;
} }
} }
@@ -161,18 +161,12 @@ namespace Cryville.Crtr {
} }
} }
public class InstantEvent : ChartEvent { public class ReleaseEvent : ChartEvent {
public readonly ChartEvent Original; public readonly ChartEvent Original;
public bool IsRelease;
public InstantEvent(ChartEvent orig, bool release = false) { public ReleaseEvent(ChartEvent orig) {
IsRelease = release; Original = orig;
if (orig != null) { time = orig.endtime;
Original = orig;
time = orig.time;
if (IsRelease)
BeatOffset = orig.Duration;
}
} }
public override int Priority { public override int Priority {

View File

@@ -87,9 +87,11 @@ namespace Cryville.Crtr.Event {
stateMap[(EventContainer)ev].StampedContainer = sev; stateMap[(EventContainer)ev].StampedContainer = sev;
} }
if (ev is InstantEvent) { if (ev is InstantEvent) {
var tev = (InstantEvent)ev; if (ev is ReleaseEvent) {
var pev = map[tev.Original]; var tev = (ReleaseEvent)ev;
pev.Subevents.Add(sev); var oev = tev.Original;
var pev = map[oev];
pev.ReleaseEvent = sev;
sev.Origin = pev; sev.Origin = pev;
} }
if (con != null && coevents.Contains(ev)) { if (con != null && coevents.Contains(ev)) {

View File

@@ -1,6 +1,5 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using CAnchor = Cryville.Crtr.Anchor; using CAnchor = Cryville.Crtr.Anchor;
namespace Cryville.Crtr { namespace Cryville.Crtr {
@@ -9,9 +8,7 @@ namespace Cryville.Crtr {
public ChartEvent Unstamped; public ChartEvent Unstamped;
public EventContainer Container; public EventContainer Container;
public StampedEvent Origin; public StampedEvent Origin;
public List<StampedEvent> Subevents = new List<StampedEvent>();
public List<StampedEvent> Coevents; public List<StampedEvent> Coevents;
private StampedEvent relev = null;
public double Duration { public double Duration {
get { get {
@@ -47,10 +44,12 @@ namespace Cryville.Crtr {
} }
} }
StampedEvent relev = null;
public StampedEvent ReleaseEvent { public StampedEvent ReleaseEvent {
get { get { return relev; }
if (relev == null) relev = Subevents.FirstOrDefault(ev => ((InstantEvent)ev.Unstamped).IsRelease); set {
return relev; if (relev != null) throw new InvalidOperationException("Release event already set");
relev = value;
} }
} }