diff --git a/examples/doublejump.js b/examples/doublejump.js index 9536d5436..b773143da 100644 --- a/examples/doublejump.js +++ b/examples/doublejump.js @@ -49,8 +49,7 @@ scene("game", () => { anchor("center"), pos(0, 0), body({ jumpForce: JUMP_FORCE }), - // allow 3 jumps - doubleJump(3), + doubleJump(), rotate(0), spin(), ]) diff --git a/src/kaboom.ts b/src/kaboom.ts index eab6ef464..6eaf27834 100644 --- a/src/kaboom.ts +++ b/src/kaboom.ts @@ -66,6 +66,7 @@ import { getExt, dataURLToArrayBuffer, EventController, + getErrorMessage, // eslint-disable-next-line warn, // eslint-disable-next-line @@ -1373,8 +1374,8 @@ export default (gopt: KaboomOpt = {}): KaboomCtx => { return new Shader(ggl, vcode, fcode, VERTEX_FORMAT.map((vert) => vert.name)) } catch (e) { const lineOffset = 14 - const fmtRegex = /(?^\w+) SHADER ERROR: 0:(?\d+): (?.+)/ - const match = (e as Error).message.match(fmtRegex) + const fmt = /(?^\w+) SHADER ERROR: 0:(?\d+): (?.+)/ + const match = getErrorMessage(e).match(fmt) const line = Number(match.groups.line) - lineOffset const msg = match.groups.msg.trim() const ty = match.groups.type.toLowerCase() diff --git a/src/utils.ts b/src/utils.ts index 99dae005f..9fff0973d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -111,12 +111,18 @@ export class EventHandler> { } export function deepEq(o1: any, o2: any): boolean { + if (o1 === o2) { + return true + } const t1 = typeof o1 const t2 = typeof o2 if (t1 !== t2) { return false } if (t1 === "object" && t2 === "object" && o1 !== null && o2 !== null) { + if (Array.isArray(o1) !== Array.isArray(o2)) { + return false + } const k1 = Object.keys(o1) const k2 = Object.keys(o2) if (k1.length !== k2.length) { @@ -125,15 +131,13 @@ export function deepEq(o1: any, o2: any): boolean { for (const k of k1) { const v1 = o1[k] const v2 = o2[k] - if (!(typeof v1 === "function" && typeof v2 === "function")) { - if (!deepEq(v1, v2)) { - return false - } + if (!deepEq(v1, v2)) { + return false } } return true } - return o1 === o2 + return false } export function base64ToArrayBuffer(base64: string): ArrayBuffer { @@ -179,6 +183,9 @@ export const uid = (() => { return () => id++ })() +export const getErrorMessage = (error: unknown) => + (error instanceof Error) ? error.message : String(error) + const warned = new Set() export function warn(msg: string) {