Files
dusk/types/scene/scene.d.ts
T
YourWishes 8f8fa8f8d1 Scene.set() JS lifecycle, UI sprite caching, emulator test scripts
- Add Scene.set(module) so JerryScript can switch scenes via
  require()'d {init, update, dispose} modules; wire it into
  engineUpdate() and rework overworldscene.js/init.js to the new shape.
- Fix scriptManagerExecFile() never pushing its own file's directory
  onto the require() dir stack, breaking relative require() calls from
  a top-level entry script (e.g. init.js -> ./overworldscene.js).
- Cache sprite geometry across frames for uislider/uitab/uiframe
  (dialogs/textbox/settings) and give uitextbox a per-page glyph cache
  instead of one spriteBatchBuffer call per visible character. uiconsole
  drops its alloc/free vertex buffer for a fixed-size one. uifps skips
  rebuilding its label when the text hasn't changed.
- Add PSP_OPTIMIZATION_PLAN.md and a handful of UI/spritebatch unit
  tests covering the new caching logic.
- Add Dolphin/PPSSPP emulator smoke-test scripts (+ Docker variants and
  CI jobs) for GameCube/Wii/PSP.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 13:21:57 -05:00

61 lines
2.0 KiB
TypeScript

// Copyright (c) 2026 Dominic Masters
//
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT
/**
* A scene: an isolated pool of entities/components. `new Scene()`
* creates an empty scene -- it is not made active automatically, call
* `.setActive()` for that. `Entity`/`Component` always operate on
* whichever scene is currently active, not on a specific Scene
* instance.
*/
declare class Scene {
constructor();
/** The engine-assigned numeric scene ID. */
readonly id: number;
/** Makes this the active scene (see Scene.getActive()). */
setActive(): void;
/** Destroys this scene and all its entities/components. */
dispose(): void;
/** Gets the currently active scene, or undefined if none is active. */
static getActive(): Scene | undefined;
/**
* Installs a scene module as the current scene, the mechanism for
* switching scenes from script. Tears down whatever module a previous
* Scene.set() call installed (calling its dispose(), then destroying
* the scene it owned), then creates and activates a fresh Scene and
* calls the new module's init() with it active -- so init() can use
* `new Entity()`/etc. as usual. The module's update() (if defined) is
* then called once per engine frame until Scene.set() is called again.
*
* Typical usage (see require.d.ts):
* ```js
* var myScene = require('./myscene.js');
* Scene.set(myScene);
* ```
*/
static set(module: SceneModule): void;
}
/**
* The shape a scene module's `module.exports` should have to be usable
* with Scene.set(). All three are optional -- a module that never moves
* anything, for instance, can omit update().
*/
interface SceneModule {
/** Called once, right after Scene.set() creates and activates the scene. */
init?(): void;
/** Called once per engine frame while this module is the active scene. */
update?(): void;
/** Called once when this module is replaced by another Scene.set() call. */
dispose?(): void;
}