UNPKG

seed-engine

Version:

A Lightweight 2D game engine using WebGL2. The engine is designed on the focus of creating a bridge between creating and publishing games to the Seed Network as modules.

75 lines (70 loc) 2.66 kB
import Updateable from '../base/Updateable'; import { SceneObject } from '../entry'; /** * Baseclass for all scenes. When creating a new scene, it should inherit this * class. * Scenes keep track of their scene objects and viewports. The scene baseclass has * functions for registering these with the scene. */ export default class Scene extends Updateable { /** * Builds the SceneObjects and Viewports list. */ constructor() { super(); this.viewportIDCounter = 0; this.sceneObjects = []; this.viewports = []; } /** * When a SceneObject is created, it is routed through the SceneManager to the current * active scene to this function. The SceneObject will register with the scene to be referenced * on update/pause/destruct calls on a scene specific basis. * * @param {SceneObject} sceneObject A SceneObject to register. */ registerSceneObject(sceneObject) { this.sceneObjects.push(sceneObject); let deregisterCallback = () => { for (let i = 0; i < this.sceneObjects.length; i++) { if (this.sceneObjects[i].id ==sceneObject.id) this.sceneObjects.splice(i, 1); return; } } return deregisterCallback; } /** * Registers a Renderable component with the viewport, by index. * * @param {Renderable} renderable A Renderable to register to the viewport. * @param {number} viewportIndex The index of the viewport. */ registerRenderableComponent(renderable, viewportIndex) { if (this.viewports.length > viewportIndex) return this.viewports[viewportIndex].registerRenderableComponent(renderable); else { throw "This viewport doesn't exist on this scene!"; } } /** * When a Viewport is created, it is routed through the SceneManager to the current * active scene to this function. The Viewport will register with the scene to be referenced * by the RenderManager and assigned to by Renderables. * * @param {Viewport} viewport A Viewport to register. */ registerViewport(viewport) { viewport.viewportIndex = this.viewportIDCounter++; this.viewports.push(viewport); let deregisterCallback = () => { for (let i = 0; i < this.viewports.length; i++) { if (this.viewports[i].viewportIndex === viewport.viewportIndex) { this.viewports.splice(i, 1); return; } } } return deregisterCallback; } }