From 204f983f59eb944272b0c2d3efbc2d88860f0a54 Mon Sep 17 00:00:00 2001 From: Miika Alonen Date: Thu, 24 Aug 2023 02:11:12 +0300 Subject: [PATCH] Added new Proxy for skipping events --- src/classes/Event.ts | 31 ++++++++++++++++++++++++++++++- src/classes/ZPlayer.ts | 14 ++++++-------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/classes/Event.ts b/src/classes/Event.ts index 50c12de..9ff1636 100644 --- a/src/classes/Event.ts +++ b/src/classes/Event.ts @@ -119,4 +119,33 @@ export abstract class SoundEvent extends Event { // Overwrite in subclasses } -} \ No newline at end of file +} + +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 => {} + + } \ No newline at end of file diff --git a/src/classes/ZPlayer.ts b/src/classes/ZPlayer.ts index 8386cb8..a5f2ce7 100644 --- a/src/classes/ZPlayer.ts +++ b/src/classes/ZPlayer.ts @@ -1,6 +1,6 @@ import { Chord, Pitch, Rest as ZRest, Ziffers } from "zifferjs"; import { Editor } from "../main"; -import { Event } from "./Event"; +import { Event, Skip } from "./Event"; import { Sound } from "./Sound"; import { Note } from "./Note"; 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. const obj = event.getExisting("freq","pitch","key","scale","octave"); 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); - } + } } else { - // Not really a rest, but calling for skipping undefined methods - return Rest.createRestProxy(0, this.app); + return Skip.createRestProxy(); } } @@ -62,10 +61,9 @@ export class Player extends Event { return value ? note.note(value) : note; } else if(event instanceof ZRest) { return Rest.createRestProxy(event.duration, this.app); - } + } } else { - // Not really a rest, but calling for skipping undefined methods - return Rest.createRestProxy(0, this.app); + return Skip.createRestProxy(); } }