|
@@ -278,10 +278,6 @@
|
|
*/
|
|
*/
|
|
public disableOfflineSupportExceptionRules = new Array<RegExp>();
|
|
public disableOfflineSupportExceptionRules = new Array<RegExp>();
|
|
|
|
|
|
- // Events
|
|
|
|
-
|
|
|
|
- private _spritePredicate: (sprite: Sprite) => boolean;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* An event triggered when the scene is disposed.
|
|
* An event triggered when the scene is disposed.
|
|
*/
|
|
*/
|
|
@@ -416,18 +412,6 @@
|
|
public onAfterParticlesRenderingObservable = new Observable<Scene>();
|
|
public onAfterParticlesRenderingObservable = new Observable<Scene>();
|
|
|
|
|
|
/**
|
|
/**
|
|
- * An event triggered when sprites rendering is about to start
|
|
|
|
- * Note: This event can be trigger more than once per frame (because sprites can be rendered by render target textures as well)
|
|
|
|
- */
|
|
|
|
- public onBeforeSpritesRenderingObservable = new Observable<Scene>();
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * An event triggered when sprites rendering is done
|
|
|
|
- * Note: This event can be trigger more than once per frame (because sprites can be rendered by render target textures as well)
|
|
|
|
- */
|
|
|
|
- public onAfterSpritesRenderingObservable = new Observable<Scene>();
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
* An event triggered when SceneLoader.Append or SceneLoader.Load or SceneLoader.ImportMesh were successfully executed
|
|
* An event triggered when SceneLoader.Append or SceneLoader.Load or SceneLoader.ImportMesh were successfully executed
|
|
*/
|
|
*/
|
|
public onDataLoadedObservable = new Observable<Scene>();
|
|
public onDataLoadedObservable = new Observable<Scene>();
|
|
@@ -805,11 +789,6 @@
|
|
* Gets or sets a boolean indicating if sprites are enabled on this scene
|
|
* Gets or sets a boolean indicating if sprites are enabled on this scene
|
|
*/
|
|
*/
|
|
public spritesEnabled = true;
|
|
public spritesEnabled = true;
|
|
- /**
|
|
|
|
- * All of the sprite managers added to this scene
|
|
|
|
- * @see http://doc.babylonjs.com/babylon101/sprites
|
|
|
|
- */
|
|
|
|
- public spriteManagers = new Array<SpriteManager>();
|
|
|
|
|
|
|
|
// Skeletons
|
|
// Skeletons
|
|
private _skeletonsEnabled = true;
|
|
private _skeletonsEnabled = true;
|
|
@@ -1021,7 +1000,6 @@
|
|
private _alternateSceneUbo: UniformBuffer;
|
|
private _alternateSceneUbo: UniformBuffer;
|
|
|
|
|
|
private _pickWithRayInverseMatrix: Matrix;
|
|
private _pickWithRayInverseMatrix: Matrix;
|
|
- private _outlineRenderer: OutlineRenderer;
|
|
|
|
|
|
|
|
private _viewMatrix: Matrix;
|
|
private _viewMatrix: Matrix;
|
|
private _projectionMatrix: Matrix;
|
|
private _projectionMatrix: Matrix;
|
|
@@ -1055,13 +1033,11 @@
|
|
private _selectionOctree: Octree<AbstractMesh>;
|
|
private _selectionOctree: Octree<AbstractMesh>;
|
|
|
|
|
|
private _pointerOverMesh: Nullable<AbstractMesh>;
|
|
private _pointerOverMesh: Nullable<AbstractMesh>;
|
|
- private _pointerOverSprite: Nullable<Sprite>;
|
|
|
|
|
|
|
|
private _debugLayer: DebugLayer;
|
|
private _debugLayer: DebugLayer;
|
|
|
|
|
|
private _pickedDownMesh: Nullable<AbstractMesh>;
|
|
private _pickedDownMesh: Nullable<AbstractMesh>;
|
|
private _pickedUpMesh: Nullable<AbstractMesh>;
|
|
private _pickedUpMesh: Nullable<AbstractMesh>;
|
|
- private _pickedDownSprite: Nullable<Sprite>;
|
|
|
|
private _externalData: StringDictionary<Object>;
|
|
private _externalData: StringDictionary<Object>;
|
|
private _uid: Nullable<string>;
|
|
private _uid: Nullable<string>;
|
|
|
|
|
|
@@ -1169,11 +1145,22 @@
|
|
*/
|
|
*/
|
|
public _beforeCameraDrawStage = Stage.Create<CameraStageAction>();
|
|
public _beforeCameraDrawStage = Stage.Create<CameraStageAction>();
|
|
/**
|
|
/**
|
|
|
|
+ * @hidden
|
|
* Defines the actions happening just before a rendering group is drawing.
|
|
* Defines the actions happening just before a rendering group is drawing.
|
|
*/
|
|
*/
|
|
public _beforeRenderingGroupDrawStage = Stage.Create<RenderingGroupStageAction>();
|
|
public _beforeRenderingGroupDrawStage = Stage.Create<RenderingGroupStageAction>();
|
|
/**
|
|
/**
|
|
* @hidden
|
|
* @hidden
|
|
|
|
+ * Defines the actions happening just before a mesh is drawing.
|
|
|
|
+ */
|
|
|
|
+ public _beforeRenderingMeshStage = Stage.Create<RenderingMeshStageAction>();
|
|
|
|
+ /**
|
|
|
|
+ * @hidden
|
|
|
|
+ * Defines the actions happening just after a mesh has been drawn.
|
|
|
|
+ */
|
|
|
|
+ public _afterRenderingMeshStage = Stage.Create<RenderingMeshStageAction>();
|
|
|
|
+ /**
|
|
|
|
+ * @hidden
|
|
* Defines the actions happening just after a rendering group has been drawn.
|
|
* Defines the actions happening just after a rendering group has been drawn.
|
|
*/
|
|
*/
|
|
public _afterRenderingGroupDrawStage = Stage.Create<RenderingGroupStageAction>();
|
|
public _afterRenderingGroupDrawStage = Stage.Create<RenderingGroupStageAction>();
|
|
@@ -1187,6 +1174,21 @@
|
|
* Defines the actions happening when Geometries are rebuilding.
|
|
* Defines the actions happening when Geometries are rebuilding.
|
|
*/
|
|
*/
|
|
public _rebuildGeometryStage = Stage.Create<SimpleStageAction>();
|
|
public _rebuildGeometryStage = Stage.Create<SimpleStageAction>();
|
|
|
|
+ /**
|
|
|
|
+ * @hidden
|
|
|
|
+ * Defines the actions happening when a pointer move event happens.
|
|
|
|
+ */
|
|
|
|
+ public _pointerMoveStage = Stage.Create<PointerMoveStageAction>();
|
|
|
|
+ /**
|
|
|
|
+ * @hidden
|
|
|
|
+ * Defines the actions happening when a pointer down event happens.
|
|
|
|
+ */
|
|
|
|
+ public _pointerDownStage = Stage.Create<PointerUpDownStageAction>();
|
|
|
|
+ /**
|
|
|
|
+ * @hidden
|
|
|
|
+ * Defines the actions happening when a pointer up event happens.
|
|
|
|
+ */
|
|
|
|
+ public _pointerUpStage = Stage.Create<PointerUpDownStageAction>();
|
|
|
|
|
|
/**
|
|
/**
|
|
* Creates a new Scene
|
|
* Creates a new Scene
|
|
@@ -1205,10 +1207,6 @@
|
|
this.postProcessManager = new PostProcessManager(this);
|
|
this.postProcessManager = new PostProcessManager(this);
|
|
}
|
|
}
|
|
|
|
|
|
- if (OutlineRenderer) {
|
|
|
|
- this._outlineRenderer = new OutlineRenderer(this);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (Tools.IsWindowObjectExist()) {
|
|
if (Tools.IsWindowObjectExist()) {
|
|
this.attachControl();
|
|
this.attachControl();
|
|
}
|
|
}
|
|
@@ -1326,14 +1324,6 @@
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Gets the outline renderer associated with the scene
|
|
|
|
- * @returns a OutlineRenderer
|
|
|
|
- */
|
|
|
|
- public getOutlineRenderer(): OutlineRenderer {
|
|
|
|
- return this._outlineRenderer;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
* Gets the engine associated with the scene
|
|
* Gets the engine associated with the scene
|
|
* @returns an Engine
|
|
* @returns an Engine
|
|
*/
|
|
*/
|
|
@@ -1539,14 +1529,6 @@
|
|
}
|
|
}
|
|
|
|
|
|
// Pointers handling
|
|
// Pointers handling
|
|
- private _pickSpriteButKeepRay(originalPointerInfo: Nullable<PickingInfo>, x: number, y: number, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {
|
|
|
|
- var result = this.pickSprite(x, y, predicate, fastCheck, camera);
|
|
|
|
- if (result) {
|
|
|
|
- result.ray = originalPointerInfo ? originalPointerInfo.ray : null;
|
|
|
|
- }
|
|
|
|
- return result;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private _setRayOnPointerInfo(pointerInfo: PointerInfo) {
|
|
private _setRayOnPointerInfo(pointerInfo: PointerInfo) {
|
|
if (pointerInfo.pickInfo) {
|
|
if (pointerInfo.pickInfo) {
|
|
if (!pointerInfo.pickInfo.ray) {
|
|
if (!pointerInfo.pickInfo.ray) {
|
|
@@ -1579,37 +1561,15 @@
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
|
|
- if (pickResult && pickResult.hit && pickResult.pickedMesh) {
|
|
|
|
- this.setPointerOverSprite(null);
|
|
|
|
-
|
|
|
|
- this.setPointerOverMesh(pickResult.pickedMesh);
|
|
|
|
-
|
|
|
|
- if (this._pointerOverMesh && this._pointerOverMesh.actionManager && this._pointerOverMesh.actionManager.hasPointerTriggers) {
|
|
|
|
- if (this._pointerOverMesh.actionManager.hoverCursor) {
|
|
|
|
- canvas.style.cursor = this._pointerOverMesh.actionManager.hoverCursor;
|
|
|
|
- } else {
|
|
|
|
- canvas.style.cursor = this.hoverCursor;
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- canvas.style.cursor = this.defaultCursor;
|
|
|
|
- }
|
|
|
|
|
|
+ var isMeshPicked = (pickResult && pickResult.hit && pickResult.pickedMesh) ? true : false;
|
|
|
|
+ if (isMeshPicked) {
|
|
|
|
+ this.setPointerOverMesh(pickResult!.pickedMesh);
|
|
} else {
|
|
} else {
|
|
this.setPointerOverMesh(null);
|
|
this.setPointerOverMesh(null);
|
|
- // Sprites
|
|
|
|
- pickResult = this._pickSpriteButKeepRay(pickResult, this._unTranslatedPointerX, this._unTranslatedPointerY, this._spritePredicate, false, this.cameraToUseForPointers || undefined);
|
|
|
|
|
|
+ }
|
|
|
|
|
|
- if (pickResult && pickResult.hit && pickResult.pickedSprite) {
|
|
|
|
- this.setPointerOverSprite(pickResult.pickedSprite);
|
|
|
|
- if (this._pointerOverSprite && this._pointerOverSprite.actionManager && this._pointerOverSprite.actionManager.hoverCursor) {
|
|
|
|
- canvas.style.cursor = this._pointerOverSprite.actionManager.hoverCursor;
|
|
|
|
- } else {
|
|
|
|
- canvas.style.cursor = this.hoverCursor;
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- this.setPointerOverSprite(null);
|
|
|
|
- // Restore pointer
|
|
|
|
- canvas.style.cursor = this.defaultCursor;
|
|
|
|
- }
|
|
|
|
|
|
+ for (let step of this._pointerMoveStage) {
|
|
|
|
+ pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, isMeshPicked, canvas);
|
|
}
|
|
}
|
|
|
|
|
|
if (pickResult) {
|
|
if (pickResult) {
|
|
@@ -1688,8 +1648,7 @@
|
|
if (pickResult && pickResult.hit && pickResult.pickedMesh && actionManager) {
|
|
if (pickResult && pickResult.hit && pickResult.pickedMesh && actionManager) {
|
|
if (this._totalPointersPressed !== 0 &&
|
|
if (this._totalPointersPressed !== 0 &&
|
|
((Date.now() - this._startingPointerTime) > Scene.LongPressDelay) &&
|
|
((Date.now() - this._startingPointerTime) > Scene.LongPressDelay) &&
|
|
- (Math.abs(this._startingPointerPosition.x - this._pointerX) < Scene.DragMovementThreshold &&
|
|
|
|
- Math.abs(this._startingPointerPosition.y - this._pointerY) < Scene.DragMovementThreshold)) {
|
|
|
|
|
|
+ !this._isPointerSwiping()) {
|
|
this._startingPointerTime = 0;
|
|
this._startingPointerTime = 0;
|
|
actionManager.processTrigger(ActionManager.OnLongPressTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt));
|
|
actionManager.processTrigger(ActionManager.OnLongPressTrigger, ActionEvent.CreateNew(pickResult.pickedMesh, evt));
|
|
}
|
|
}
|
|
@@ -1698,6 +1657,11 @@
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ else {
|
|
|
|
+ for (let step of this._pointerDownStage) {
|
|
|
|
+ pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
if (pickResult) {
|
|
if (pickResult) {
|
|
let type = PointerEventTypes.POINTERDOWN;
|
|
let type = PointerEventTypes.POINTERDOWN;
|
|
@@ -1762,6 +1726,14 @@
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ else {
|
|
|
|
+ if (!clickInfo.ignore) {
|
|
|
|
+ for (let step of this._pointerUpStage) {
|
|
|
|
+ pickResult = step.action(this._unTranslatedPointerX, this._unTranslatedPointerY, pickResult, evt);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
if (this._pickedDownMesh &&
|
|
if (this._pickedDownMesh &&
|
|
this._pickedDownMesh.actionManager &&
|
|
this._pickedDownMesh.actionManager &&
|
|
this._pickedDownMesh.actionManager.hasSpecificTrigger(ActionManager.OnPickOutTrigger) &&
|
|
this._pickedDownMesh.actionManager.hasSpecificTrigger(ActionManager.OnPickOutTrigger) &&
|
|
@@ -1810,6 +1782,12 @@
|
|
return this._pointerCaptures[pointerId];
|
|
return this._pointerCaptures[pointerId];
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /** @hidden */
|
|
|
|
+ public _isPointerSwiping(): boolean {
|
|
|
|
+ return Math.abs(this._startingPointerPosition.x - this._pointerX) > Scene.DragMovementThreshold ||
|
|
|
|
+ Math.abs(this._startingPointerPosition.y - this._pointerY) > Scene.DragMovementThreshold;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Attach events to the canvas (To handle actionManagers triggers and raise onPointerMove, onPointerDown and onPointerUp
|
|
* Attach events to the canvas (To handle actionManagers triggers and raise onPointerMove, onPointerDown and onPointerUp
|
|
* @param attachUp defines if you want to attach events to pointerup
|
|
* @param attachUp defines if you want to attach events to pointerup
|
|
@@ -1855,8 +1833,7 @@
|
|
}
|
|
}
|
|
if (checkPicking) {
|
|
if (checkPicking) {
|
|
let btn = evt.button;
|
|
let btn = evt.button;
|
|
- clickInfo.hasSwiped = Math.abs(this._startingPointerPosition.x - this._pointerX) > Scene.DragMovementThreshold ||
|
|
|
|
- Math.abs(this._startingPointerPosition.y - this._pointerY) > Scene.DragMovementThreshold;
|
|
|
|
|
|
+ clickInfo.hasSwiped = this._isPointerSwiping();
|
|
|
|
|
|
if (!clickInfo.hasSwiped) {
|
|
if (!clickInfo.hasSwiped) {
|
|
let checkSingleClickImmediately = !Scene.ExclusiveDoubleClickMode;
|
|
let checkSingleClickImmediately = !Scene.ExclusiveDoubleClickMode;
|
|
@@ -1903,8 +1880,7 @@
|
|
) {
|
|
) {
|
|
// pointer has not moved for 2 clicks, it's a double click
|
|
// pointer has not moved for 2 clicks, it's a double click
|
|
if (!clickInfo.hasSwiped &&
|
|
if (!clickInfo.hasSwiped &&
|
|
- Math.abs(this._previousStartingPointerPosition.x - this._startingPointerPosition.x) < Scene.DragMovementThreshold &&
|
|
|
|
- Math.abs(this._previousStartingPointerPosition.y - this._startingPointerPosition.y) < Scene.DragMovementThreshold) {
|
|
|
|
|
|
+ !this._isPointerSwiping()) {
|
|
this._previousStartingPointerTime = 0;
|
|
this._previousStartingPointerTime = 0;
|
|
this._doubleClickOccured = true;
|
|
this._doubleClickOccured = true;
|
|
clickInfo.doubleClick = true;
|
|
clickInfo.doubleClick = true;
|
|
@@ -1950,10 +1926,6 @@
|
|
cb(clickInfo, this._currentPickResult);
|
|
cb(clickInfo, this._currentPickResult);
|
|
};
|
|
};
|
|
|
|
|
|
- this._spritePredicate = (sprite: Sprite): boolean => {
|
|
|
|
- return sprite.isPickable && sprite.actionManager && sprite.actionManager.hasPointerTriggers;
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
this._onPointerMove = (evt: PointerEvent) => {
|
|
this._onPointerMove = (evt: PointerEvent) => {
|
|
|
|
|
|
this._updatePointerPosition(evt);
|
|
this._updatePointerPosition(evt);
|
|
@@ -2014,32 +1986,6 @@
|
|
var pickResult = this.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, this.pointerDownPredicate, false, this.cameraToUseForPointers);
|
|
var pickResult = this.pick(this._unTranslatedPointerX, this._unTranslatedPointerY, this.pointerDownPredicate, false, this.cameraToUseForPointers);
|
|
|
|
|
|
this._processPointerDown(pickResult, evt);
|
|
this._processPointerDown(pickResult, evt);
|
|
-
|
|
|
|
- // Sprites
|
|
|
|
- this._pickedDownSprite = null;
|
|
|
|
- if (this.spriteManagers.length > 0) {
|
|
|
|
- pickResult = this.pickSprite(this._unTranslatedPointerX, this._unTranslatedPointerY, this._spritePredicate, false, this.cameraToUseForPointers || undefined);
|
|
|
|
-
|
|
|
|
- if (pickResult && pickResult.hit && pickResult.pickedSprite) {
|
|
|
|
- if (pickResult.pickedSprite.actionManager) {
|
|
|
|
- this._pickedDownSprite = pickResult.pickedSprite;
|
|
|
|
- switch (evt.button) {
|
|
|
|
- case 0:
|
|
|
|
- pickResult.pickedSprite.actionManager.processTrigger(ActionManager.OnLeftPickTrigger, ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, this, evt));
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- pickResult.pickedSprite.actionManager.processTrigger(ActionManager.OnCenterPickTrigger, ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, this, evt));
|
|
|
|
- break;
|
|
|
|
- case 2:
|
|
|
|
- pickResult.pickedSprite.actionManager.processTrigger(ActionManager.OnRightPickTrigger, ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, this, evt));
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- if (pickResult.pickedSprite.actionManager) {
|
|
|
|
- pickResult.pickedSprite.actionManager.processTrigger(ActionManager.OnPickDownTrigger, ActionEvent.CreateNewFromSprite(pickResult.pickedSprite, this, evt));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
};
|
|
};
|
|
|
|
|
|
this._onPointerUp = (evt: PointerEvent) => {
|
|
this._onPointerUp = (evt: PointerEvent) => {
|
|
@@ -2098,29 +2044,6 @@
|
|
|
|
|
|
this._processPointerUp(pickResult, evt, clickInfo);
|
|
this._processPointerUp(pickResult, evt, clickInfo);
|
|
|
|
|
|
- // Sprites
|
|
|
|
- if (!clickInfo.ignore) {
|
|
|
|
- if (this.spriteManagers.length > 0) {
|
|
|
|
- let spritePickResult = this.pickSprite(this._unTranslatedPointerX, this._unTranslatedPointerY, this._spritePredicate, false, this.cameraToUseForPointers || undefined);
|
|
|
|
-
|
|
|
|
- if (spritePickResult) {
|
|
|
|
- if (spritePickResult.hit && spritePickResult.pickedSprite) {
|
|
|
|
- if (spritePickResult.pickedSprite.actionManager) {
|
|
|
|
- spritePickResult.pickedSprite.actionManager.processTrigger(ActionManager.OnPickUpTrigger, ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, this, evt));
|
|
|
|
- if (spritePickResult.pickedSprite.actionManager) {
|
|
|
|
- if (Math.abs(this._startingPointerPosition.x - this._pointerX) < Scene.DragMovementThreshold && Math.abs(this._startingPointerPosition.y - this._pointerY) < Scene.DragMovementThreshold) {
|
|
|
|
- spritePickResult.pickedSprite.actionManager.processTrigger(ActionManager.OnPickTrigger, ActionEvent.CreateNewFromSprite(spritePickResult.pickedSprite, this, evt));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (this._pickedDownSprite && this._pickedDownSprite.actionManager && this._pickedDownSprite !== spritePickResult.pickedSprite) {
|
|
|
|
- this._pickedDownSprite.actionManager.processTrigger(ActionManager.OnPickOutTrigger, ActionEvent.CreateNewFromSprite(this._pickedDownSprite, this, evt));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
this._previousPickResult = this._currentPickResult;
|
|
this._previousPickResult = this._currentPickResult;
|
|
});
|
|
});
|
|
};
|
|
};
|
|
@@ -4881,11 +4804,17 @@
|
|
this._cameraDrawRenderTargetStage.clear();
|
|
this._cameraDrawRenderTargetStage.clear();
|
|
this._beforeCameraDrawStage.clear();
|
|
this._beforeCameraDrawStage.clear();
|
|
this._beforeRenderingGroupDrawStage.clear();
|
|
this._beforeRenderingGroupDrawStage.clear();
|
|
|
|
+ this._beforeRenderingMeshStage.clear();
|
|
|
|
+ this._afterRenderingMeshStage.clear();
|
|
this._afterRenderingGroupDrawStage.clear();
|
|
this._afterRenderingGroupDrawStage.clear();
|
|
this._afterCameraDrawStage.clear();
|
|
this._afterCameraDrawStage.clear();
|
|
this._beforeCameraUpdateStage.clear();
|
|
this._beforeCameraUpdateStage.clear();
|
|
this._gatherRenderTargetsStage.clear();
|
|
this._gatherRenderTargetsStage.clear();
|
|
this._rebuildGeometryStage.clear();
|
|
this._rebuildGeometryStage.clear();
|
|
|
|
+ this._pointerMoveStage.clear();
|
|
|
|
+ this._pointerDownStage.clear();
|
|
|
|
+ this._pointerUpStage.clear();
|
|
|
|
+
|
|
for (let component of this._components) {
|
|
for (let component of this._components) {
|
|
component.dispose();
|
|
component.dispose();
|
|
}
|
|
}
|
|
@@ -4936,8 +4865,6 @@
|
|
this.onAfterActiveMeshesEvaluationObservable.clear();
|
|
this.onAfterActiveMeshesEvaluationObservable.clear();
|
|
this.onBeforeParticlesRenderingObservable.clear();
|
|
this.onBeforeParticlesRenderingObservable.clear();
|
|
this.onAfterParticlesRenderingObservable.clear();
|
|
this.onAfterParticlesRenderingObservable.clear();
|
|
- this.onBeforeSpritesRenderingObservable.clear();
|
|
|
|
- this.onAfterSpritesRenderingObservable.clear();
|
|
|
|
this.onBeforeDrawPhaseObservable.clear();
|
|
this.onBeforeDrawPhaseObservable.clear();
|
|
this.onAfterDrawPhaseObservable.clear();
|
|
this.onAfterDrawPhaseObservable.clear();
|
|
this.onBeforePhysicsObservable.clear();
|
|
this.onBeforePhysicsObservable.clear();
|
|
@@ -5009,11 +4936,6 @@
|
|
this.particleSystems[0].dispose();
|
|
this.particleSystems[0].dispose();
|
|
}
|
|
}
|
|
|
|
|
|
- // Release sprites
|
|
|
|
- while (this.spriteManagers.length) {
|
|
|
|
- this.spriteManagers[0].dispose();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// Release postProcesses
|
|
// Release postProcesses
|
|
while (this.postProcesses.length) {
|
|
while (this.postProcesses.length) {
|
|
this.postProcesses[0].dispose();
|
|
this.postProcesses[0].dispose();
|
|
@@ -5329,46 +5251,6 @@
|
|
return pickingInfos;
|
|
return pickingInfos;
|
|
}
|
|
}
|
|
|
|
|
|
- private _internalPickSprites(ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {
|
|
|
|
- if (!PickingInfo) {
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var pickingInfo = null;
|
|
|
|
-
|
|
|
|
- if (!camera) {
|
|
|
|
- if (!this.activeCamera) {
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
- camera = this.activeCamera;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (this.spriteManagers.length > 0) {
|
|
|
|
- for (var spriteIndex = 0; spriteIndex < this.spriteManagers.length; spriteIndex++) {
|
|
|
|
- var spriteManager = this.spriteManagers[spriteIndex];
|
|
|
|
-
|
|
|
|
- if (!spriteManager.isPickable) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- var result = spriteManager.intersects(ray, camera, predicate, fastCheck);
|
|
|
|
- if (!result || !result.hit)
|
|
|
|
- continue;
|
|
|
|
-
|
|
|
|
- if (!fastCheck && pickingInfo != null && result.distance >= pickingInfo.distance)
|
|
|
|
- continue;
|
|
|
|
-
|
|
|
|
- pickingInfo = result;
|
|
|
|
-
|
|
|
|
- if (fastCheck) {
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return pickingInfo || new PickingInfo();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private _tempPickingRay: Nullable<Ray> = Ray ? Ray.Zero() : null;
|
|
private _tempPickingRay: Nullable<Ray> = Ray ? Ray.Zero() : null;
|
|
|
|
|
|
/** Launch a ray to try to pick a mesh in the scene
|
|
/** Launch a ray to try to pick a mesh in the scene
|
|
@@ -5393,49 +5275,11 @@
|
|
return result;
|
|
return result;
|
|
}
|
|
}
|
|
|
|
|
|
- /** Launch a ray to try to pick a sprite in the scene
|
|
|
|
- * @param x position on screen
|
|
|
|
- * @param y position on screen
|
|
|
|
- * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true
|
|
|
|
- * @param fastCheck Launch a fast check only using the bounding boxes. Can be set to null.
|
|
|
|
- * @param camera camera to use for computing the picking ray. Can be set to null. In this case, the scene.activeCamera will be used
|
|
|
|
- * @returns a PickingInfo
|
|
|
|
- */
|
|
|
|
- public pickSprite(x: number, y: number, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {
|
|
|
|
- this.createPickingRayInCameraSpaceToRef(x, y, this._tempPickingRay!, camera);
|
|
|
|
-
|
|
|
|
- return this._internalPickSprites(this._tempPickingRay!, predicate, fastCheck, camera);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private _cachedRayForTransform: Ray;
|
|
private _cachedRayForTransform: Ray;
|
|
|
|
|
|
- /** Use the given ray to pick a sprite in the scene
|
|
|
|
- * @param ray The ray (in world space) to use to pick meshes
|
|
|
|
- * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true
|
|
|
|
- * @param fastCheck Launch a fast check only using the bounding boxes. Can be set to null.
|
|
|
|
- * @param camera camera to use. Can be set to null. In this case, the scene.activeCamera will be used
|
|
|
|
- * @returns a PickingInfo
|
|
|
|
- */
|
|
|
|
- public pickSpriteWithRay(ray: Ray, predicate?: (sprite: Sprite) => boolean, fastCheck?: boolean, camera?: Camera): Nullable<PickingInfo> {
|
|
|
|
- if (!this._cachedRayForTransform) {
|
|
|
|
- this._cachedRayForTransform = Ray.Zero();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (!camera) {
|
|
|
|
- if (!this.activeCamera) {
|
|
|
|
- return null;
|
|
|
|
- }
|
|
|
|
- camera = this.activeCamera;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- Ray.TransformToRef(ray, camera.getViewMatrix(), this._cachedRayForTransform);
|
|
|
|
-
|
|
|
|
- return this._internalPickSprites(this._cachedRayForTransform, predicate, fastCheck, camera);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
/** Use the given ray to pick a mesh in the scene
|
|
/** Use the given ray to pick a mesh in the scene
|
|
* @param ray The ray to use to pick meshes
|
|
* @param ray The ray to use to pick meshes
|
|
- * @param predicate Predicate function used to determine eligible sprites. Can be set to null. In this case, a sprite must have isPickable set to true
|
|
|
|
|
|
+ * @param predicate Predicate function used to determine eligible meshes. Can be set to null. In this case, a mesh must have isPickable set to true
|
|
* @param fastCheck Launch a fast check only using the bounding boxes. Can be set to null
|
|
* @param fastCheck Launch a fast check only using the bounding boxes. Can be set to null
|
|
* @returns a PickingInfo
|
|
* @returns a PickingInfo
|
|
*/
|
|
*/
|
|
@@ -5520,33 +5364,6 @@
|
|
return this._pointerOverMesh;
|
|
return this._pointerOverMesh;
|
|
}
|
|
}
|
|
|
|
|
|
- /**
|
|
|
|
- * Force the sprite under the pointer
|
|
|
|
- * @param sprite defines the sprite to use
|
|
|
|
- */
|
|
|
|
- public setPointerOverSprite(sprite: Nullable<Sprite>): void {
|
|
|
|
- if (this._pointerOverSprite === sprite) {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (this._pointerOverSprite && this._pointerOverSprite.actionManager) {
|
|
|
|
- this._pointerOverSprite.actionManager.processTrigger(ActionManager.OnPointerOutTrigger, ActionEvent.CreateNewFromSprite(this._pointerOverSprite, this));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- this._pointerOverSprite = sprite;
|
|
|
|
- if (this._pointerOverSprite && this._pointerOverSprite.actionManager) {
|
|
|
|
- this._pointerOverSprite.actionManager.processTrigger(ActionManager.OnPointerOverTrigger, ActionEvent.CreateNewFromSprite(this._pointerOverSprite, this));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * Gets the sprite under the pointer
|
|
|
|
- * @returns a Sprite or null if no sprite is under the pointer
|
|
|
|
- */
|
|
|
|
- public getPointerOverSprite(): Nullable<Sprite> {
|
|
|
|
- return this._pointerOverSprite;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// Physics
|
|
// Physics
|
|
|
|
|
|
/**
|
|
/**
|