|
@@ -552,6 +552,9 @@
|
|
|
|
|
|
private _pickedDownMesh: AbstractMesh;
|
|
|
private _pickedDownSprite: Sprite;
|
|
|
+ private _externalData: StringDictionary<Object>;
|
|
|
+ private _uid: string;
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* @constructor
|
|
@@ -562,6 +565,9 @@
|
|
|
|
|
|
engine.scenes.push(this);
|
|
|
|
|
|
+ this._externalData = new StringDictionary<Object>();
|
|
|
+ this._uid = null;
|
|
|
+
|
|
|
this._renderingManager = new RenderingManager(this);
|
|
|
|
|
|
this.postProcessManager = new PostProcessManager(this);
|
|
@@ -1868,6 +1874,56 @@
|
|
|
return (this._activeMeshes.indexOf(mesh) !== -1);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Return a unique id as a string which can serve as an identifier for the scene
|
|
|
+ */
|
|
|
+ public get uid(): string {
|
|
|
+ if (!this._uid) {
|
|
|
+ this._uid = Tools.RandomId();
|
|
|
+ }
|
|
|
+ return this._uid;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Add an externaly attached data from its key.
|
|
|
+ * This method call will fail and return false, if such key already exists.
|
|
|
+ * If you don't care and just want to get the data no matter what, use the more convenient getOrAddExternalDataWithFactory() method.
|
|
|
+ * @param key the unique key that identifies the data
|
|
|
+ * @param data the data object to associate to the key for this Engine instance
|
|
|
+ * @return true if no such key were already present and the data was added successfully, false otherwise
|
|
|
+ */
|
|
|
+ public addExternalData<T>(key: string, data: T): boolean {
|
|
|
+ return this._externalData.add(key, data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get an externaly attached data from its key
|
|
|
+ * @param key the unique key that identifies the data
|
|
|
+ * @return the associated data, if present (can be null), or undefined if not present
|
|
|
+ */
|
|
|
+ public getExternalData<T>(key: string): T {
|
|
|
+ return <T>this._externalData.get(key);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Get an externaly attached data from its key, create it using a factory if it's not already present
|
|
|
+ * @param key the unique key that identifies the data
|
|
|
+ * @param factory the factory that will be called to create the instance if and only if it doesn't exists
|
|
|
+ * @return the associated data, can be null if the factory returned null.
|
|
|
+ */
|
|
|
+ public getOrAddExternalDataWithFactory<T>(key: string, factory: (k: string) => T): T {
|
|
|
+ return <T>this._externalData.getOrAddWithFactory(key, factory);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Remove an externaly attached data from the Engine instance
|
|
|
+ * @param key the unique key that identifies the data
|
|
|
+ * @return true if the data was successfully removed, false if it doesn't exist
|
|
|
+ */
|
|
|
+ public removeExternalData(key): boolean {
|
|
|
+ return this._externalData.remove(key);
|
|
|
+ }
|
|
|
+
|
|
|
private _evaluateSubMesh(subMesh: SubMesh, mesh: AbstractMesh): void {
|
|
|
if (mesh.alwaysSelectAsActiveMesh || mesh.subMeshes.length === 1 || subMesh.isInFrustum(this._frustumPlanes)) {
|
|
|
var material = subMesh.getMaterial();
|