|
@@ -112,7 +112,6 @@
|
|
public actionManager: ActionManager;
|
|
public actionManager: ActionManager;
|
|
public _actionManagers = new Array<ActionManager>();
|
|
public _actionManagers = new Array<ActionManager>();
|
|
private _meshesForIntersections = new SmartArray<AbstractMesh>(256);
|
|
private _meshesForIntersections = new SmartArray<AbstractMesh>(256);
|
|
- public asyncEventTriggers = true;
|
|
|
|
|
|
|
|
// Procedural textures
|
|
// Procedural textures
|
|
public proceduralTexturesEnabled = true;
|
|
public proceduralTexturesEnabled = true;
|
|
@@ -282,7 +281,7 @@
|
|
this._updatePointerPosition(evt);
|
|
this._updatePointerPosition(evt);
|
|
|
|
|
|
var pickResult = this.pick(this._pointerX, this._pointerY,
|
|
var pickResult = this.pick(this._pointerX, this._pointerY,
|
|
- (mesh: AbstractMesh): boolean => mesh.isPickable && mesh.isVisible && mesh.isReady()/* && mesh.actionManager && mesh.actionManager.hasPointerTriggers*/,
|
|
|
|
|
|
+ (mesh: AbstractMesh): boolean => mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasPointerTriggers,
|
|
false,
|
|
false,
|
|
this.cameraToUseForPointers);
|
|
this.cameraToUseForPointers);
|
|
|
|
|
|
@@ -304,7 +303,7 @@
|
|
|
|
|
|
if (!this.onPointerDown) {
|
|
if (!this.onPointerDown) {
|
|
predicate = (mesh: AbstractMesh): boolean => {
|
|
predicate = (mesh: AbstractMesh): boolean => {
|
|
- return mesh.isPickable && mesh.isVisible && mesh.isReady()/* && mesh.actionManager && mesh.actionManager.hasPickTriggers*/;
|
|
|
|
|
|
+ return mesh.isPickable && mesh.isVisible && mesh.isReady() && mesh.actionManager && mesh.actionManager.hasPickTriggers;
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
@@ -313,22 +312,20 @@
|
|
var pickResult = this.pick(this._pointerX, this._pointerY, predicate, false, this.cameraToUseForPointers);
|
|
var pickResult = this.pick(this._pointerX, this._pointerY, predicate, false, this.cameraToUseForPointers);
|
|
|
|
|
|
if (pickResult.hit) {
|
|
if (pickResult.hit) {
|
|
- var actionEvent = ActionEvent.CreateNew(pickResult.pickedMesh, evt);
|
|
|
|
- this._triggerJsEvent("pick", actionEvent, pickResult.pickedMesh.htmlId);
|
|
|
|
- if (pickResult.pickedMesh.actionManager && pickResult.pickedMesh.actionManager.hasPickTriggers) {
|
|
|
|
|
|
+ if (pickResult.pickedMesh.actionManager) {
|
|
switch (evt.button) {
|
|
switch (evt.button) {
|
|
case 0:
|
|
case 0:
|
|
- pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnLeftPickTrigger, actionEvent);
|
|
|
|
|
|
+ pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnLeftPickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh));
|
|
break;
|
|
break;
|
|
case 1:
|
|
case 1:
|
|
- pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnCenterPickTrigger, actionEvent);
|
|
|
|
|
|
+ pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnCenterPickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh));
|
|
break;
|
|
break;
|
|
case 2:
|
|
case 2:
|
|
- pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnRightPickTrigger, actionEvent);
|
|
|
|
|
|
+ pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnRightPickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh));
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnPickTrigger, actionEvent);
|
|
|
|
- }
|
|
|
|
|
|
+ pickResult.pickedMesh.actionManager.processTrigger(BABYLON.ActionManager.OnPickTrigger, ActionEvent.CreateNew(pickResult.pickedMesh));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
if (this.onPointerDown) {
|
|
if (this.onPointerDown) {
|
|
@@ -337,21 +334,18 @@
|
|
};
|
|
};
|
|
|
|
|
|
this._onKeyDown = (evt: Event) => {
|
|
this._onKeyDown = (evt: Event) => {
|
|
- var actionEvent = ActionEvent.CreateNewFromScene(this, evt);
|
|
|
|
- this._triggerJsEvent("keyDown", actionEvent);
|
|
|
|
if (this.actionManager) {
|
|
if (this.actionManager) {
|
|
- this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyDownTrigger, actionEvent);
|
|
|
|
|
|
+ this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyDownTrigger, ActionEvent.CreateNewFromScene(this, evt));
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
this._onKeyUp = (evt: Event) => {
|
|
this._onKeyUp = (evt: Event) => {
|
|
- var actionEvent = ActionEvent.CreateNewFromScene(this, evt);
|
|
|
|
- this._triggerJsEvent("keyUp", actionEvent);
|
|
|
|
if (this.actionManager) {
|
|
if (this.actionManager) {
|
|
- this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyUpTrigger, actionEvent);
|
|
|
|
|
|
+ this.actionManager.processTrigger(BABYLON.ActionManager.OnKeyUpTrigger, ActionEvent.CreateNewFromScene(this, evt));
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+
|
|
var eventPrefix = Tools.GetPointerPrefix();
|
|
var eventPrefix = Tools.GetPointerPrefix();
|
|
this._engine.getRenderingCanvas().addEventListener(eventPrefix + "move", this._onPointerMove, false);
|
|
this._engine.getRenderingCanvas().addEventListener(eventPrefix + "move", this._onPointerMove, false);
|
|
this._engine.getRenderingCanvas().addEventListener(eventPrefix + "down", this._onPointerDown, false);
|
|
this._engine.getRenderingCanvas().addEventListener(eventPrefix + "down", this._onPointerDown, false);
|
|
@@ -360,16 +354,6 @@
|
|
window.addEventListener("keyup", this._onKeyUp, false);
|
|
window.addEventListener("keyup", this._onKeyUp, false);
|
|
}
|
|
}
|
|
|
|
|
|
- private _triggerJsEvent(evt: string, eventData: any, htmlId?: string) {
|
|
|
|
- if (!this.asyncEventTriggers) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- var newEvent: CustomEvent = <CustomEvent> document.createEvent('CustomEvent');
|
|
|
|
- newEvent.initCustomEvent(evt /*+ "_babylon"*/, true, true, eventData);
|
|
|
|
- var htmlElement = htmlId ? document.querySelector("#" + htmlId) : this._engine.getRenderingCanvas();
|
|
|
|
- htmlElement.dispatchEvent(newEvent);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public detachControl() {
|
|
public detachControl() {
|
|
var eventPrefix = Tools.GetPointerPrefix();
|
|
var eventPrefix = Tools.GetPointerPrefix();
|
|
this._engine.getRenderingCanvas().removeEventListener(eventPrefix + "move", this._onPointerMove);
|
|
this._engine.getRenderingCanvas().removeEventListener(eventPrefix + "move", this._onPointerMove);
|
|
@@ -560,71 +544,6 @@
|
|
this._viewMatrix.multiplyToRef(this._projectionMatrix, this._transformMatrix);
|
|
this._viewMatrix.multiplyToRef(this._projectionMatrix, this._transformMatrix);
|
|
}
|
|
}
|
|
|
|
|
|
- //Node adding
|
|
|
|
- public addMesh(mesh: AbstractMesh) {
|
|
|
|
- this.meshes.push(mesh);
|
|
|
|
- this._generateHtmlElement("mesh", mesh);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public removeMesh(mesh: AbstractMesh) {
|
|
|
|
- var index = this.meshes.indexOf(mesh);
|
|
|
|
- if (index != -1) {
|
|
|
|
- this.meshes.splice(index, 1);
|
|
|
|
- }
|
|
|
|
- this._removeHtmlElement("mesh", mesh.htmlId);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public addLight(light: Light) {
|
|
|
|
- this.lights.push(light);
|
|
|
|
- this._generateHtmlElement("light", light);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public removeLight(light: Light) {
|
|
|
|
- var index = this.lights.indexOf(light);
|
|
|
|
- if (index != -1) {
|
|
|
|
- this.lights.splice(index, 1);
|
|
|
|
- }
|
|
|
|
- this._removeHtmlElement("light", light.htmlId);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public addCamera(camera: Camera) {
|
|
|
|
- this.cameras.push(camera);
|
|
|
|
- this._generateHtmlElement("camera", camera);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public removeCamera(camera: Camera) {
|
|
|
|
- var index = this.cameras.indexOf(camera);
|
|
|
|
- if (index != -1) {
|
|
|
|
- this.cameras.splice(index, 1);
|
|
|
|
- }
|
|
|
|
- this._removeHtmlElement("camera", camera.htmlId);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private _generateHtmlElement(kind: string, node:Node) {
|
|
|
|
- var element: HTMLElement = document.createElement(kind);
|
|
|
|
- var htmlId = kind + "-" + node.id;
|
|
|
|
- var idNumeration = 0;
|
|
|
|
- if (document.getElementById(htmlId)) {
|
|
|
|
- while (document.getElementById(htmlId + "_" + idNumeration++)) {
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- htmlId = htmlId + "_" + idNumeration;
|
|
|
|
- Tools.Warn("Extra " + kind + " with the same id was added with id " + htmlId);
|
|
|
|
- }
|
|
|
|
- node.htmlId = htmlId;
|
|
|
|
- element.id = htmlId;
|
|
|
|
- var canvas = this.getEngine().getRenderingCanvas();
|
|
|
|
- canvas.insertBefore(element, null);
|
|
|
|
- this._triggerJsEvent("nodeAdded", { kind: kind, originalId:node.id, htmlId: htmlId });
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- private _removeHtmlElement(kind:string, id: string) {
|
|
|
|
- var element = document.getElementById(id);
|
|
|
|
- element.parentElement.removeChild(element);
|
|
|
|
- this._triggerJsEvent("nodeRemoved", { kind: kind, id: id });
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// Methods
|
|
// Methods
|
|
public setActiveCameraByID(id: string): Camera {
|
|
public setActiveCameraByID(id: string): Camera {
|
|
var camera = this.getCameraByID(id);
|
|
var camera = this.getCameraByID(id);
|
|
@@ -1110,15 +1029,11 @@
|
|
var currentIntersectionInProgress = sourceMesh._intersectionsInProgress.indexOf(otherMesh);
|
|
var currentIntersectionInProgress = sourceMesh._intersectionsInProgress.indexOf(otherMesh);
|
|
|
|
|
|
if (areIntersecting && currentIntersectionInProgress === -1 && action.trigger == ActionManager.OnIntersectionEnterTrigger) {
|
|
if (areIntersecting && currentIntersectionInProgress === -1 && action.trigger == ActionManager.OnIntersectionEnterTrigger) {
|
|
- var actionEvent = ActionEvent.CreateNew(sourceMesh);
|
|
|
|
- this._triggerJsEvent("intersectionEnter", actionEvent, sourceMesh.htmlId);
|
|
|
|
- sourceMesh.actionManager.processTrigger(ActionManager.OnIntersectionEnterTrigger, actionEvent);
|
|
|
|
|
|
+ sourceMesh.actionManager.processTrigger(ActionManager.OnIntersectionEnterTrigger, ActionEvent.CreateNew(sourceMesh));
|
|
sourceMesh._intersectionsInProgress.push(otherMesh);
|
|
sourceMesh._intersectionsInProgress.push(otherMesh);
|
|
|
|
|
|
} else if (!areIntersecting && currentIntersectionInProgress > -1 && action.trigger == ActionManager.OnIntersectionExitTrigger) {
|
|
} else if (!areIntersecting && currentIntersectionInProgress > -1 && action.trigger == ActionManager.OnIntersectionExitTrigger) {
|
|
- var actionEvent = ActionEvent.CreateNew(sourceMesh);
|
|
|
|
- this._triggerJsEvent("intersectionExit", actionEvent, sourceMesh.htmlId);
|
|
|
|
- sourceMesh.actionManager.processTrigger(ActionManager.OnIntersectionExitTrigger, actionEvent);
|
|
|
|
|
|
+ sourceMesh.actionManager.processTrigger(ActionManager.OnIntersectionExitTrigger, ActionEvent.CreateNew(sourceMesh));
|
|
|
|
|
|
var indexOfOther = sourceMesh._intersectionsInProgress.indexOf(otherMesh);
|
|
var indexOfOther = sourceMesh._intersectionsInProgress.indexOf(otherMesh);
|
|
|
|
|
|
@@ -1504,26 +1419,14 @@
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- if (this._pointerOverMesh) {
|
|
|
|
- var actionEvent = ActionEvent.CreateNew(this._pointerOverMesh);
|
|
|
|
- this._triggerJsEvent("pointerOut", actionEvent, this._pointerOverMesh.htmlId);
|
|
|
|
- if (this._pointerOverMesh.actionManager && this._pointerOverMesh.actionManager.hasPointerTriggers) {
|
|
|
|
- this._pointerOverMesh.actionManager.processTrigger(ActionManager.OnPointerOutTrigger, actionEvent);
|
|
|
|
- }
|
|
|
|
|
|
+ if (this._pointerOverMesh && this._pointerOverMesh.actionManager) {
|
|
|
|
+ this._pointerOverMesh.actionManager.processTrigger(ActionManager.OnPointerOutTrigger, ActionEvent.CreateNew(this._pointerOverMesh));
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
this._pointerOverMesh = mesh;
|
|
this._pointerOverMesh = mesh;
|
|
- if (this._pointerOverMesh) {
|
|
|
|
- actionEvent = ActionEvent.CreateNew(this._pointerOverMesh);
|
|
|
|
- this._triggerJsEvent("pointerOver", actionEvent, this._pointerOverMesh.htmlId);
|
|
|
|
- if (this._pointerOverMesh.actionManager && this._pointerOverMesh.actionManager.hasPointerTriggers) {
|
|
|
|
- this._pointerOverMesh.actionManager.processTrigger(ActionManager.OnPointerOverTrigger, actionEvent);
|
|
|
|
- }
|
|
|
|
|
|
+ if (this._pointerOverMesh && this._pointerOverMesh.actionManager) {
|
|
|
|
+ this._pointerOverMesh.actionManager.processTrigger(ActionManager.OnPointerOverTrigger, ActionEvent.CreateNew(this._pointerOverMesh));
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public getPointerOverMesh(): AbstractMesh {
|
|
public getPointerOverMesh(): AbstractMesh {
|