fix restart overlap

This commit is contained in:
Felix Roos 2022-04-24 01:27:44 +02:00
parent ab9871640a
commit f96ca562a2

View File

@ -727,14 +727,18 @@ export class Pattern {
return new Pattern((state) => return new Pattern((state) =>
pat pat
.query(state) .query(state)
.map((event) => { .map((outer_hap) => {
const resetSpan = new TimeSpan(event.part.begin.sub(event.whole.begin), event.duration); const resetSpan = new TimeSpan(
return this.query(new State(resetSpan)).map((hap) => outer_hap.part.begin.sub(outer_hap.whole.begin),
hap outer_hap.part.end.sub(outer_hap.whole.begin),
.withSpan( );
(s) => s.withTime((t) => t.add(event.whole.begin)), // TODO: somehow make sure span end does not overlap next event of pat return this.query(new State(resetSpan)).map((inner_hap) =>
) new Hap(
.setContext(hap.combineContext(event)), inner_hap.whole?.withTime((t) => t.add(outer_hap.whole.begin)).intersection?.(outer_hap.whole) ||
undefined,
inner_hap.part.withTime((t) => t.add(outer_hap.whole.begin)).intersection(outer_hap.part),
inner_hap.value,
).setContext(outer_hap.combineContext(inner_hap)),
); );
}) })
.flat(), .flat(),