babylon.collisionCoordinator.js 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. var BABYLON;
  2. (function (BABYLON) {
  3. var CollisionCoordinator = (function () {
  4. function CollisionCoordinator(_scene) {
  5. this._scene = _scene;
  6. this._scaledPosition = BABYLON.Vector3.Zero();
  7. this._scaledVelocity = BABYLON.Vector3.Zero();
  8. this._finalPosition = BABYLON.Vector3.Zero();
  9. this._collisionsCallbackArray = [];
  10. //TODO initialize worker here
  11. }
  12. // Collisions
  13. CollisionCoordinator.prototype._getNewPosition = function (position, velocity, collider, maximumRetry, excludedMesh, onNewPosition, collisionIndex) {
  14. if (excludedMesh === void 0) { excludedMesh = null; }
  15. if (collisionIndex === void 0) { collisionIndex = 0; }
  16. position.divideToRef(collider.radius, this._scaledPosition);
  17. velocity.divideToRef(collider.radius, this._scaledVelocity);
  18. if (this._scene.workerCollisions) {
  19. }
  20. else {
  21. collider.retry = 0;
  22. collider.initialVelocity = this._scaledVelocity;
  23. collider.initialPosition = this._scaledPosition;
  24. this._collideWithWorld(this._scaledPosition, this._scaledVelocity, collider, maximumRetry, this._finalPosition, excludedMesh);
  25. this._finalPosition.multiplyInPlace(collider.radius);
  26. //run the callback
  27. onNewPosition(collisionIndex, this._finalPosition, collider.collidedMesh);
  28. }
  29. };
  30. CollisionCoordinator.prototype._collideWithWorld = function (position, velocity, collider, maximumRetry, finalPosition, excludedMesh) {
  31. if (excludedMesh === void 0) { excludedMesh = null; }
  32. var closeDistance = BABYLON.Engine.CollisionsEpsilon * 10.0;
  33. if (collider.retry >= maximumRetry) {
  34. finalPosition.copyFrom(position);
  35. return;
  36. }
  37. collider._initialize(position, velocity, closeDistance);
  38. for (var index = 0; index < this._scene.meshes.length; index++) {
  39. var mesh = this._scene.meshes[index];
  40. if (mesh.isEnabled() && mesh.checkCollisions && mesh.subMeshes && mesh !== excludedMesh) {
  41. mesh._checkCollision(collider);
  42. }
  43. }
  44. if (!collider.collisionFound) {
  45. position.addToRef(velocity, finalPosition);
  46. return;
  47. }
  48. if (velocity.x !== 0 || velocity.y !== 0 || velocity.z !== 0) {
  49. collider._getResponse(position, velocity);
  50. }
  51. if (velocity.length() <= closeDistance) {
  52. finalPosition.copyFrom(position);
  53. return;
  54. }
  55. collider.retry++;
  56. this._collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh);
  57. };
  58. return CollisionCoordinator;
  59. })();
  60. BABYLON.CollisionCoordinator = CollisionCoordinator;
  61. })(BABYLON || (BABYLON = {}));
  62. //# sourceMappingURL=babylon.collisionCoordinator.js.map