import type Camera2d from "./../camera/camera2d.ts";
import World from "../physics/world.js";
import type Renderer from "./../video/renderer.js";
import type { ApplicationSettings, ResolvedApplicationSettings } from "./settings.ts";
/**
* The Application class is the main entry point for creating a melonJS game.
* It initializes the renderer, creates the game world and viewport, registers DOM event
* listeners (resize, orientation, scroll), and starts the game loop.
*
* The Application instance provides access to the core game systems:
* - {@link Application#renderer renderer} — the active Canvas or WebGL renderer
* - {@link Application#world world} — the root container for all game objects
* - {@link Application#viewport viewport} — the default camera / viewport
*
* The app instance is automatically passed to {@link Stage#onResetEvent} and
* {@link Stage#onDestroyEvent}, and is accessible from any renderable via
* {@link Renderable#parentApp parentApp}.
* @category Application
* @example
* // create a new melonJS Application
* const app = new Application(800, 600, {
* parent: "screen",
* scaleMethod: "flex-width",
* renderer: 2, // AUTO
* });
*
* // add objects to the world
* app.world.addChild(new Sprite(0, 0, { image: "player" }));
*
* // access the viewport
* app.viewport.follow(player, app.viewport.AXIS.BOTH);
*/
export default class Application {
/**
* the parent HTML element holding the main canvas of this application
*/
parentElement: HTMLElement;
/**
* a reference to the active Canvas or WebGL renderer
*/
renderer: Renderer;
/**
* the active stage "default" camera
*/
viewport: Camera2d;
/**
* a reference to the game world,
* a world is a virtual environment containing all the game objects
*/
world: World;
/**
* when true, all objects will be added under the root world container.
* When false, a `me.Container` object will be created for each corresponding groups
* @default true
*/
mergeGroup: boolean;
/**
* Last time the game update loop was executed.
* Use this value to implement frame prediction in drawing events,
* for creating smooth motion while running game update logic at
* a lower fps.
*/
lastUpdate: DOMHighResTimeStamp;
/**
* true when this app instance has been initialized
* @default false
*/
isInitialized: boolean;
/**
* the given settings used when creating this application
*/
settings: ResolvedApplicationSettings;
/**
* Specify whether to pause this app when losing focus
* @default true
* @example
* // keep the default game instance running even when losing focus
* app.pauseOnBlur = false;
*/
pauseOnBlur: boolean;
/**
* Specify whether to unpause this app when gaining back focus
* @default true
*/
resumeOnFocus: boolean;
/**
* Specify whether to stop this app when losing focus
* @default false
*/
stopOnBlur: boolean;
isDirty: boolean;
isAlwaysDirty: boolean;
frameCounter: number;
frameRate: number;
accumulator: number;
accumulatorMax: number;
accumulatorUpdateDelta: number;
stepSize: number;
private _onResize?;
private _onOrientationChange?;
private _onScroll?;
updateDelta: number;
lastUpdateStart: number | null;
updateAverageDelta: number;
/**
* Create and initialize a new melonJS Application.
* This is the recommended way to start a melonJS game.
* @param width - The width of the canvas viewport
* @param height - The height of the canvas viewport
* @param options - The optional parameters for the application and default renderer
* @throws {Error} Will throw an exception if it fails to instantiate a renderer
* @example
* const app = new Application(1024, 768, {
* parent: "game-container",
* scale: "auto",
* scaleMethod: "fit",
* renderer: 2, // AUTO
* });
*/
constructor(width: number, height: number, options?: Partial & {
legacy?: boolean;
});
/**
* init the game instance (create a physic world, update starting time, etc..)
* @param width - The width of the canvas viewport
* @param height - The height of the canvas viewport
* @param options - The optional parameters for the application and default renderer
*/
init(width: number, height: number, options?: Partial): void;
/**
* reset the game Object manager
* destroy all current objects
*/
reset(): void;
/**
* Specify the property to be used when sorting renderables for this application game world.
* Accepted values : "x", "y", "z", "depth"
* @see {@link World.sortOn}
*/
get sortOn(): string;
set sortOn(value: string);
/**
* Fired when a level is fully loaded and all renderable instantiated.
* Additionally the level id will also be passed to the called function.
* @example
* // call myFunction () everytime a level is loaded
* app.onLevelLoaded = this.myFunction.bind(this);
*/
onLevelLoaded(): void;
/**
* Update the renderer framerate using the system config variables.
* @see {@link timer.maxfps}
* @see {@link World.fps}
*/
updateFrameRate(): void;
/**
* Returns the parent HTML Element holding the main canvas of this application
* @returns the parent HTML element
*/
getParentElement(): HTMLElement;
/**
* The HTML canvas element associated with this application's renderer.
* @example
* // access the canvas DOM element
* const canvas = app.canvas;
*/
get canvas(): HTMLCanvasElement;
/**
* Trigger a manual resize of the application canvas to fit the parent element.
* This is automatically called on window resize/orientation change, but can
* be called manually if the parent element size changes programmatically.
* @example
* // force a resize after changing the parent element dimensions
* app.resize();
*/
resize(): void;
/**
* Destroy this application instance and release all associated resources.
* Removes the canvas from the DOM, destroys the world, and unregisters
* all event listeners.
* @param removeCanvas - if true, the canvas element is removed from the DOM (default: true)
* @example
* // clean up when done
* app.destroy();
*/
destroy(removeCanvas?: boolean): void;
/**
* force the redraw (not update) of all objects
*/
repaint(): void;
/** @ignore */
_tick(time: number): void;
/** @ignore */
_onBlur(): void;
/** @ignore */
_onFocus(): void;
/**
* update all objects related to this game active scene/stage
* @param time - current timestamp as provided by the RAF callback
*/
update(time: number): void;
/**
* draw the active scene/stage associated to this game
*/
draw(): void;
}
/**
* The default game application instance.
* Set via {@link setDefaultGame} during engine initialization.
* When using {@link Application} directly, prefer using the app instance
* (e.g. from {@link Stage#onResetEvent} or {@link Renderable#parentApp}).
*/
export declare let game: Application;
/**
* Set the default game application instance.
* @ignore
*/
export declare function setDefaultGame(app: Application): void;
//# sourceMappingURL=application.d.ts.map