From 7b6dbb295fa4f20673840da69f705aacc19dc1ed Mon Sep 17 00:00:00 2001 From: Emma Date: Sun, 23 Feb 2025 14:36:34 -0700 Subject: [PATCH] some minor tweaks --- public/blobs/snr/audio/ding.mp3 | Bin 0 -> 36096 bytes src/lib/resources.ts | 4 +++- src/math/angle.ts | 7 +++++++ src/state/states/LoadState.ts | 4 +++- 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 public/blobs/snr/audio/ding.mp3 create mode 100644 src/math/angle.ts diff --git a/public/blobs/snr/audio/ding.mp3 b/public/blobs/snr/audio/ding.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8c81acf056154ef4f56651c6d70b2233895b8e48 GIT binary patch literal 36096 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 UGi(l9Njdmm-v4RJ|F8P}4Gejy8~^|S literal 0 HcmV?d00001 diff --git a/src/lib/resources.ts b/src/lib/resources.ts index 2a8c2cb..8ebfdfd 100644 --- a/src/lib/resources.ts +++ b/src/lib/resources.ts @@ -41,7 +41,7 @@ export class ResourceManager { ) { const identifier = parseNamespacedId(name); if (typeof (value as EventSource).addEventListener === "function") { - if (value instanceof Image) { + if (value instanceof Image || value instanceof Audio) { // During development, we can use the local file system value.src = `/blobs/${identifier.namespace}/${identifier.type}/${identifier.name}${ @@ -55,8 +55,10 @@ export class ResourceManager { const onload = () => { this.resources.set(name, value); resolve(true); + (value as EventSource).removeEventListener("loadeddata", onload); (value as EventSource).removeEventListener("load", onload); }; + (value as EventSource).addEventListener("loadeddata", onload); (value as EventSource).addEventListener("load", onload); }), ); diff --git a/src/math/angle.ts b/src/math/angle.ts new file mode 100644 index 0000000..c9d272f --- /dev/null +++ b/src/math/angle.ts @@ -0,0 +1,7 @@ +export function angleToRadians(angle: number) { + return angle / 180 * Math.PI; +} + +export function angleToDegrees(angle: number) { + return angle * 180 / Math.PI; +} diff --git a/src/state/states/LoadState.ts b/src/state/states/LoadState.ts index 363b853..27424b6 100644 --- a/src/state/states/LoadState.ts +++ b/src/state/states/LoadState.ts @@ -39,9 +39,11 @@ export class LoadState extends State { resources.set("snr:sprite/LargeLady", new Image()); // resources.get("snr:sprite/engine")!.src = // "/sprites/EngineSprites.png"; + + resources.set("snr:audio/ding", new Audio()); resources.ready().then(() => { this.stateMachine.transitionTo(States.RUNNING); - }); + }).catch((e) => console.error(e)); const doodler = getContextItem("doodler"); // this.layers.push(doodler.createLayer((_, __, dTime) => {