12e53395d4bb343173f937b991b85f9c080e4c4efe01927097e90d9031d44465.json 9.3 KB

1
  1. {"ast":null,"code":"import { Scene } from \"../scene.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\nimport { Collider } from \"./collider.js\";\nimport { AbstractEngine } from \"../Engines/abstractEngine.js\";\n/** @internal */\nexport class DefaultCollisionCoordinator {\n constructor() {\n this._scaledPosition = Vector3.Zero();\n this._scaledVelocity = Vector3.Zero();\n this._finalPosition = Vector3.Zero();\n }\n getNewPosition(position, displacement, collider, maximumRetry, excludedMesh, onNewPosition, collisionIndex) {\n position.divideToRef(collider._radius, this._scaledPosition);\n displacement.divideToRef(collider._radius, this._scaledVelocity);\n collider.collidedMesh = null;\n collider._retry = 0;\n collider._initialVelocity = this._scaledVelocity;\n collider._initialPosition = this._scaledPosition;\n this._collideWithWorld(this._scaledPosition, this._scaledVelocity, collider, maximumRetry, this._finalPosition, excludedMesh);\n this._finalPosition.multiplyInPlace(collider._radius);\n //run the callback\n onNewPosition(collisionIndex, this._finalPosition, collider.collidedMesh);\n }\n createCollider() {\n return new Collider();\n }\n init(scene) {\n this._scene = scene;\n }\n _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh = null) {\n const closeDistance = AbstractEngine.CollisionsEpsilon * 10.0;\n if (collider._retry >= maximumRetry) {\n finalPosition.copyFrom(position);\n return;\n }\n // Check if this is a mesh else camera or -1\n const collisionMask = excludedMesh ? excludedMesh.collisionMask : collider.collisionMask;\n collider._initialize(position, velocity, closeDistance);\n // Check if collision detection should happen against specified list of meshes or,\n // if not specified, against all meshes in the scene\n const meshes = excludedMesh && excludedMesh.surroundingMeshes || this._scene.meshes;\n for (let index = 0; index < meshes.length; index++) {\n const mesh = meshes[index];\n if (mesh.isEnabled() && mesh.checkCollisions && mesh.subMeshes && mesh !== excludedMesh && (collisionMask & mesh.collisionGroup) !== 0) {\n mesh._checkCollision(collider);\n }\n }\n if (!collider.collisionFound) {\n position.addToRef(velocity, finalPosition);\n return;\n }\n if (velocity.x !== 0 || velocity.y !== 0 || velocity.z !== 0) {\n collider._getResponse(position, velocity);\n }\n if (velocity.length() <= closeDistance) {\n finalPosition.copyFrom(position);\n return;\n }\n collider._retry++;\n this._collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh);\n }\n}\nScene.CollisionCoordinatorFactory = () => {\n return new DefaultCollisionCoordinator();\n};","map":{"version":3,"names":["Scene","Vector3","Collider","AbstractEngine","DefaultCollisionCoordinator","constructor","_scaledPosition","Zero","_scaledVelocity","_finalPosition","getNewPosition","position","displacement","collider","maximumRetry","excludedMesh","onNewPosition","collisionIndex","divideToRef","_radius","collidedMesh","_retry","_initialVelocity","_initialPosition","_collideWithWorld","multiplyInPlace","createCollider","init","scene","_scene","velocity","finalPosition","closeDistance","CollisionsEpsilon","copyFrom","collisionMask","_initialize","meshes","surroundingMeshes","index","length","mesh","isEnabled","checkCollisions","subMeshes","collisionGroup","_checkCollision","collisionFound","addToRef","x","y","z","_getResponse","CollisionCoordinatorFactory"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Collisions/collisionCoordinator.js"],"sourcesContent":["import { Scene } from \"../scene.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\nimport { Collider } from \"./collider.js\";\nimport { AbstractEngine } from \"../Engines/abstractEngine.js\";\n/** @internal */\nexport class DefaultCollisionCoordinator {\n constructor() {\n this._scaledPosition = Vector3.Zero();\n this._scaledVelocity = Vector3.Zero();\n this._finalPosition = Vector3.Zero();\n }\n getNewPosition(position, displacement, collider, maximumRetry, excludedMesh, onNewPosition, collisionIndex) {\n position.divideToRef(collider._radius, this._scaledPosition);\n displacement.divideToRef(collider._radius, this._scaledVelocity);\n collider.collidedMesh = null;\n collider._retry = 0;\n collider._initialVelocity = this._scaledVelocity;\n collider._initialPosition = this._scaledPosition;\n this._collideWithWorld(this._scaledPosition, this._scaledVelocity, collider, maximumRetry, this._finalPosition, excludedMesh);\n this._finalPosition.multiplyInPlace(collider._radius);\n //run the callback\n onNewPosition(collisionIndex, this._finalPosition, collider.collidedMesh);\n }\n createCollider() {\n return new Collider();\n }\n init(scene) {\n this._scene = scene;\n }\n _collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh = null) {\n const closeDistance = AbstractEngine.CollisionsEpsilon * 10.0;\n if (collider._retry >= maximumRetry) {\n finalPosition.copyFrom(position);\n return;\n }\n // Check if this is a mesh else camera or -1\n const collisionMask = excludedMesh ? excludedMesh.collisionMask : collider.collisionMask;\n collider._initialize(position, velocity, closeDistance);\n // Check if collision detection should happen against specified list of meshes or,\n // if not specified, against all meshes in the scene\n const meshes = (excludedMesh && excludedMesh.surroundingMeshes) || this._scene.meshes;\n for (let index = 0; index < meshes.length; index++) {\n const mesh = meshes[index];\n if (mesh.isEnabled() && mesh.checkCollisions && mesh.subMeshes && mesh !== excludedMesh && (collisionMask & mesh.collisionGroup) !== 0) {\n mesh._checkCollision(collider);\n }\n }\n if (!collider.collisionFound) {\n position.addToRef(velocity, finalPosition);\n return;\n }\n if (velocity.x !== 0 || velocity.y !== 0 || velocity.z !== 0) {\n collider._getResponse(position, velocity);\n }\n if (velocity.length() <= closeDistance) {\n finalPosition.copyFrom(position);\n return;\n }\n collider._retry++;\n this._collideWithWorld(position, velocity, collider, maximumRetry, finalPosition, excludedMesh);\n }\n}\nScene.CollisionCoordinatorFactory = () => {\n return new DefaultCollisionCoordinator();\n};\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}