@megavr/ecsy-babylon
Version:
babylon.js ecsy binding and helpers
50 lines (45 loc) • 1.54 kB
text/typescript
import * as BABYLON from "@babylonjs/core";
import { System, Entity, SystemConstructor } from "ecsy";
import { getWorld } from "./worldUtils";
import { GameSystem } from "../systems/GameSystem";
import { Scene } from "../components/Scene";
/** @hidden */
export function getSystem<T extends System>(self: System, target: SystemConstructor<T>): T {
return getWorld(self).getSystem(target) as T;
}
/**
* @hidden
* Get canvas used for rendering.
* @param system A registered ecsy System class
*/
export function getRenderingCanvas(system: System): HTMLCanvasElement {
return getSystem(system, GameSystem).renderingCanvas as HTMLCanvasElement;
}
/**
* @hidden
* Get all scenes in engine.
* @param system A registered ecsy System class
*/
export function getScenes(system: System): BABYLON.Scene[] {
return getSystem(system, GameSystem).scenes;
}
/**
* Get a scene or return active scene.
* @param system A registered ecsy System class
* @param scene Scene entity
*/
export function getScene(system: System, scene?: Entity): BABYLON.Scene {
if (scene) {
return scene.getComponent(Scene).object;
} else {
return getSystem(system, GameSystem).activeScene;
}
}
/**
* Get scene AssetManager or return AssetManager in active scene.
* @param system A registered ecsy System class
* @param scene Scene entity
*/
export function getAssetManager(system: System, scene?: Entity): BABYLON.AssetsManager {
return getSystem(system, GameSystem).getAssetManager(scene);
}