UNPKG

@awayjs/scene

Version:
286 lines (285 loc) 9.67 kB
import { getTimer } from '@awayjs/core'; import { TouchPoint } from '@awayjs/stage'; import { View, PickGroup, } from '@awayjs/view'; import { RenderGroup, DefaultRenderer } from '@awayjs/renderer'; import { MaterialManager } from '@awayjs/graphics'; import { MethodMaterial } from '@awayjs/materials'; import { Camera } from './display/Camera'; import { CameraEvent } from './events/CameraEvent'; import { MouseManager } from './managers/MouseManager'; import { DisplayObjectContainer } from './display/DisplayObjectContainer'; var Scene = /** @class */ (function () { /* *********************************************************************** * Disabled / Not yet implemented *********************************************************************** * * private _background:away.textures.Texture2DBase; * * public _pTouch3DManager:away.managers.Touch3DManager; * */ function Scene(container, camera, view, rendererClass) { if (container === void 0) { container = null; } if (camera === void 0) { camera = null; } if (view === void 0) { view = null; } if (rendererClass === void 0) { rendererClass = null; } var _this = this; this._time = 0; this._deltaTime = 0; this._onProjectionChangedDelegate = function (event) { return _this._onProjectionChanged(event); }; this._rendererClass = rendererClass || DefaultRenderer; this._pickGroup = PickGroup.getInstance(); this.view = view || new View(); this.container = container || new DisplayObjectContainer(); this.camera = camera || new Camera(); // if (this._shareContext) // this._mouse3DManager.addViewLayer(this); } Object.defineProperty(Scene.prototype, "container", { get: function () { return this._container; }, set: function (value) { if (this._container == value) return; if (this._mousePicker) this._mouseManager.unregisterPicker(this._mousePicker); this._container = value; this._node = this._view.getNode(this._container); this._mousePicker = this._pickGroup.getRaycastPicker(this._node); this._tabPicker = this._pickGroup.getTabPicker(this._node); this._mousePicker.findClosestCollision = true; this._mouseManager.registerPicker(this._mousePicker); if (this._camera) { this._camera.clear(); this._node.invalidate(); } }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "view", { get: function () { return this._view; }, set: function (value) { if (this._view == value) return; if (this._view) { if (this._renderer) { this._renderer.clear(); this._renderer = null; } if (this._mousePicker) this._mouseManager.unregisterPicker(this._mousePicker); } this._view = value; this._mouseManager = MouseManager.getInstance(this._view.stage); if (this._mousePicker) this._mouseManager.registerPicker(this._mousePicker); if (this._camera) this._view.projection = this._camera.projection; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "renderer", { get: function () { if (!this._renderer) this._renderer = RenderGroup .getInstance(this._rendererClass) .getRenderer(this._node); return this._renderer; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "mouseX", { get: function () { return this._mouseX; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "mouseY", { get: function () { return this._mouseY; }, enumerable: false, configurable: true }); Scene.prototype.getLocalMouseX = function (node) { return node .getInverseMatrix3D() .transformVector(this._view.unproject(this._view.stage.screenX, this._view.stage.screenY, 1000)) .x; }; Scene.prototype.getLocalMouseY = function (node) { return node .getInverseMatrix3D() .transformVector(this._view.unproject(this._view.stage.screenX, this._view.stage.screenY, 1000)) .y; }; Scene.prototype.getLocalTouchPoints = function (node) { var localPosition; var localTouchPoints = new Array(); var len = this._view.stage.touchPoints.length; for (var i = 0; i < len; i++) { localPosition = node .getInverseMatrix3D() .transformVector(this._view.unproject(this._view.stage.touchPoints[i].x, this._view.stage.touchPoints[i].y, 1000)); localTouchPoints.push(new TouchPoint(localPosition.x, localPosition.y, this._view.stage.touchPoints[i].id)); } return localTouchPoints; }; Object.defineProperty(Scene.prototype, "rendererClass", { /** * */ get: function () { return this._rendererClass; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "rendererType", { set: function (value) { if (this._rendererClass == value) return; if (this._renderer) { this._renderer.clear(); this._renderer = null; } this._rendererClass = value; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "camera", { /** * * @returns {Camera3D} */ get: function () { return this._camera; }, /** * Set camera that's used to render the scene for this view */ set: function (value) { if (this._camera == value) return; if (this._camera) { this._camera.clear(); this._camera.removeEventListener(CameraEvent.PROJECTION_CHANGED, this._onProjectionChangedDelegate); } this._camera = value; this._camera.addEventListener(CameraEvent.PROJECTION_CHANGED, this._onProjectionChangedDelegate); if (this._view) this._view.projection = this._camera.projection; this._node.invalidate(); //this._camera.partition = this._partition; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "deltaTime", { /** * * @returns {number} */ get: function () { return this._deltaTime; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "mouseManager", { get: function () { return this._mouseManager; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "mousePicker", { /** * */ get: function () { return this._mousePicker; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "tabPicker", { /** * */ get: function () { return this._tabPicker; }, enumerable: false, configurable: true }); Object.defineProperty(Scene.prototype, "renderedFacesCount", { /** * * @returns {number} */ get: function () { return 0; //TODO //return this._pEntityCollector._pNumTriangles;//numTriangles; }, enumerable: false, configurable: true }); Scene.prototype.fireMouseEvents = function () { if (!this.disableMouseEvents) this._mouseManager.fireMouseEvents(this._mousePicker); }; /** * Renders the view. */ Scene.prototype.render = function (fireMousEvents) { if (fireMousEvents === void 0) { fireMousEvents = true; } this._updateTime(); // update picking if (fireMousEvents && !this.disableMouseEvents) this._mouseManager.fireMouseEvents(this._mousePicker); if (this.beforeRenderCallback) this.beforeRenderCallback(); //render the contents of the scene this.renderer.render(); }; /** * */ Scene.prototype._updateTime = function () { var time = getTimer(); if (this._time == 0) this._time = time; this._deltaTime = time - this._time; this._time = time; }; /** * */ Scene.prototype.dispose = function () { if (this._renderer) { this._renderer.clear(); this._renderer = null; } this._mouseManager.dispose(); this._mouseManager = null; }; /** * */ Scene.prototype._onProjectionChanged = function (event) { this._view.projection = this._camera.projection; }; return Scene; }()); export { Scene }; MaterialManager.materialClass = MethodMaterial;