Added new Proxy for skipping events
This commit is contained in:
@ -119,4 +119,33 @@ export abstract class SoundEvent extends Event {
|
|||||||
// Overwrite in subclasses
|
// Overwrite in subclasses
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class Skip {
|
||||||
|
|
||||||
|
_fallbackMethod = (): Skip => {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static createRestProxy = () => {
|
||||||
|
const instance = new Skip();
|
||||||
|
return new Proxy(instance, {
|
||||||
|
// @ts-ignore
|
||||||
|
get(target, propKey, receiver) {
|
||||||
|
// @ts-ignore
|
||||||
|
if (typeof target[propKey] === 'undefined') {
|
||||||
|
return target._fallbackMethod;
|
||||||
|
}
|
||||||
|
// @ts-ignore
|
||||||
|
return target[propKey];
|
||||||
|
},
|
||||||
|
// @ts-ignore
|
||||||
|
set(target, propKey, value, receiver) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
out = (): void => {}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
import { Chord, Pitch, Rest as ZRest, Ziffers } from "zifferjs";
|
import { Chord, Pitch, Rest as ZRest, Ziffers } from "zifferjs";
|
||||||
import { Editor } from "../main";
|
import { Editor } from "../main";
|
||||||
import { Event } from "./Event";
|
import { Event, Skip } from "./Event";
|
||||||
import { Sound } from "./Sound";
|
import { Sound } from "./Sound";
|
||||||
import { Note } from "./Note";
|
import { Note } from "./Note";
|
||||||
import { Rest } from "./Rest";
|
import { Rest } from "./Rest";
|
||||||
@ -43,12 +43,11 @@ export class Player extends Event {
|
|||||||
// TODO: Quick hack. Select which attributes to use, but some ziffers stuff is needed for chaining key change etc.
|
// TODO: Quick hack. Select which attributes to use, but some ziffers stuff is needed for chaining key change etc.
|
||||||
const obj = event.getExisting("freq","pitch","key","scale","octave");
|
const obj = event.getExisting("freq","pitch","key","scale","octave");
|
||||||
return new Sound(obj, this.app).sound(name);
|
return new Sound(obj, this.app).sound(name);
|
||||||
} else if(event instanceof Rest) {
|
} else if(event instanceof ZRest) {
|
||||||
return Rest.createRestProxy(event.duration, this.app);
|
return Rest.createRestProxy(event.duration, this.app);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Not really a rest, but calling for skipping undefined methods
|
return Skip.createRestProxy();
|
||||||
return Rest.createRestProxy(0, this.app);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,10 +61,9 @@ export class Player extends Event {
|
|||||||
return value ? note.note(value) : note;
|
return value ? note.note(value) : note;
|
||||||
} else if(event instanceof ZRest) {
|
} else if(event instanceof ZRest) {
|
||||||
return Rest.createRestProxy(event.duration, this.app);
|
return Rest.createRestProxy(event.duration, this.app);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Not really a rest, but calling for skipping undefined methods
|
return Skip.createRestProxy();
|
||||||
return Rest.createRestProxy(0, this.app);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user