@awayjs/scene
Version:
AwayJS scene classes
286 lines (285 loc) • 9.67 kB
JavaScript
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;