8f8fa8f8d1
- 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>
61 lines
2.0 KiB
TypeScript
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;
|
|
}
|