diff --git a/src/engine/Director/Director.ts b/src/engine/Director/Director.ts index 81c967595..7729d0d09 100644 --- a/src/engine/Director/Director.ts +++ b/src/engine/Director/Director.ts @@ -279,13 +279,35 @@ export class Director { return undefined; } - getSceneName(scene: Scene) { - for (const [name, sceneInstance] of Object.entries(this.scenes)) { - if (scene === sceneInstance) { - return name; + /** + * Returns the name of the registered scene, null if none can be found + * @param scene + */ + getSceneName(scene: Scene): string | null { + for (const [name, maybeScene] of Object.entries(this.scenes)) { + if (maybeScene instanceof Scene) { + if (scene === maybeScene) { + return name; + } + } else if (!isSceneConstructor(maybeScene)) { + if (scene === maybeScene.scene) { + return name; + } } } - return 'unknown scene name'; + + for (const [name, maybeScene] of Object.entries(this.scenes)) { + if (isSceneConstructor(maybeScene)) { + if (scene.constructor === maybeScene) { + return name; + } + } else if (!(maybeScene instanceof Scene)) { + if (scene.constructor === maybeScene.scene) { + return name; + } + } + } + return null; } /** diff --git a/src/spec/DirectorSpec.ts b/src/spec/DirectorSpec.ts index f91422a82..eeae0a9c5 100644 --- a/src/spec/DirectorSpec.ts +++ b/src/spec/DirectorSpec.ts @@ -96,6 +96,36 @@ describe('A Director', () => { engine.dispose(); }); + it('can get a scene name', () => { + const engine = TestUtils.engine(); + const clock = engine.clock as ex.TestClock; + clock.start(); + const scene1 = new ex.Scene(); + scene1._initialize(engine); + const scene2 = new ex.Scene(); + scene2._initialize(engine); + const scene3 = new ex.Scene(); + scene3._initialize(engine); + + class SceneCtor1 extends ex.Scene {} + class SceneCtor2 extends ex.Scene {} + + const sut = new ex.Director(engine, { + scene1, + scene2, + myScene: { scene: scene3 }, + sceneWithCtor: { scene: SceneCtor1 }, + ctor: SceneCtor2 + }); + + expect(sut.getSceneName(scene1)).toBe('scene1'); + expect(sut.getSceneName(scene2)).toBe('scene2'); + expect(sut.getSceneName(scene3)).toBe('myScene'); + expect(sut.getSceneName(new SceneCtor1())).toBe('sceneWithCtor'); + expect(sut.getSceneName(new SceneCtor2())).toBe('ctor'); + expect(sut.getSceneName(new ex.Scene())).toBe(null); + }); + it('will draw a start scene transition', async () => { const engine = TestUtils.engine(); const clock = engine.clock as ex.TestClock;