{"ast":null,"code":"import { Vector3 } from \"../Maths/math.vector.js\";\nimport { Plane } from \"../Maths/math.plane.js\";\nconst intersectBoxAASphere = (boxMin, boxMax, sphereCenter, sphereRadius) => {\n if (boxMin.x > sphereCenter.x + sphereRadius) {\n return false;\n }\n if (sphereCenter.x - sphereRadius > boxMax.x) {\n return false;\n }\n if (boxMin.y > sphereCenter.y + sphereRadius) {\n return false;\n }\n if (sphereCenter.y - sphereRadius > boxMax.y) {\n return false;\n }\n if (boxMin.z > sphereCenter.z + sphereRadius) {\n return false;\n }\n if (sphereCenter.z - sphereRadius > boxMax.z) {\n return false;\n }\n return true;\n};\nconst getLowestRoot = function () {\n const result = {\n root: 0,\n found: false\n };\n return function (a, b, c, maxR) {\n result.root = 0;\n result.found = false;\n const determinant = b * b - 4.0 * a * c;\n if (determinant < 0) {\n return result;\n }\n const sqrtD = Math.sqrt(determinant);\n let r1 = (-b - sqrtD) / (2.0 * a);\n let r2 = (-b + sqrtD) / (2.0 * a);\n if (r1 > r2) {\n const temp = r2;\n r2 = r1;\n r1 = temp;\n }\n if (r1 > 0 && r1 < maxR) {\n result.root = r1;\n result.found = true;\n return result;\n }\n if (r2 > 0 && r2 < maxR) {\n result.root = r2;\n result.found = true;\n return result;\n }\n return result;\n };\n}();\n/** @internal */\nexport class Collider {\n constructor() {\n // Implementation of the \"Improved Collision detection and Response\" algorithm proposed by Kasper Fauerby\n // https://www.peroxide.dk/papers/collision/collision.pdf\n this._collisionPoint = Vector3.Zero();\n this._planeIntersectionPoint = Vector3.Zero();\n this._tempVector = Vector3.Zero();\n this._tempVector2 = Vector3.Zero();\n this._tempVector3 = Vector3.Zero();\n this._tempVector4 = Vector3.Zero();\n this._edge = Vector3.Zero();\n this._baseToVertex = Vector3.Zero();\n this._destinationPoint = Vector3.Zero();\n this._slidePlaneNormal = Vector3.Zero();\n this._displacementVector = Vector3.Zero();\n /** @internal */\n this._radius = Vector3.One();\n /** @internal */\n this._retry = 0;\n /** @internal */\n this._basePointWorld = Vector3.Zero();\n this._velocityWorld = Vector3.Zero();\n this._normalizedVelocity = Vector3.Zero();\n this._collisionMask = -1;\n }\n get collisionMask() {\n return this._collisionMask;\n }\n set collisionMask(mask) {\n this._collisionMask = !isNaN(mask) ? mask : -1;\n }\n /**\n * Gets the plane normal used to compute the sliding response (in local space)\n */\n get slidePlaneNormal() {\n return this._slidePlaneNormal;\n }\n // Methods\n /**\n * @internal\n */\n _initialize(source, dir, e) {\n this._velocity = dir;\n this._velocitySquaredLength = this._velocity.lengthSquared();\n const len = Math.sqrt(this._velocitySquaredLength);\n if (len === 0 || len === 1.0) {\n this._normalizedVelocity.copyFromFloats(dir._x, dir._y, dir._z);\n } else {\n dir.scaleToRef(1.0 / len, this._normalizedVelocity);\n }\n this._basePoint = source;\n source.multiplyToRef(this._radius, this._basePointWorld);\n dir.multiplyToRef(this._radius, this._velocityWorld);\n this._velocityWorldLength = this._velocityWorld.length();\n this._epsilon = e;\n this.collisionFound = false;\n }\n /**\n * @internal\n */\n _checkPointInTriangle(point, pa, pb, pc, n) {\n pa.subtractToRef(point, this._tempVector);\n pb.subtractToRef(point, this._tempVector2);\n Vector3.CrossToRef(this._tempVector, this._tempVector2, this._tempVector4);\n let d = Vector3.Dot(this._tempVector4, n);\n if (d < 0) {\n return false;\n }\n pc.subtractToRef(point, this._tempVector3);\n Vector3.CrossToRef(this._tempVector2, this._tempVector3, this._tempVector4);\n d = Vector3.Dot(this._tempVector4, n);\n if (d < 0) {\n return false;\n }\n Vector3.CrossToRef(this._tempVector3, this._tempVector, this._tempVector4);\n d = Vector3.Dot(this._tempVector4, n);\n return d >= 0;\n }\n /**\n * @internal\n */\n _canDoCollision(sphereCenter, sphereRadius, vecMin, vecMax) {\n const distance = Vector3.Distance(this._basePointWorld, sphereCenter);\n const max = Math.max(this._radius.x, this._radius.y, this._radius.z);\n if (distance > this._velocityWorldLength + max + sphereRadius) {\n return false;\n }\n if (!intersectBoxAASphere(vecMin, vecMax, this._basePointWorld, this._velocityWorldLength + max)) {\n return false;\n }\n return true;\n }\n /**\n * @internal\n */\n _testTriangle(faceIndex, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh) {\n let t0;\n let embeddedInPlane = false;\n //defensive programming, actually not needed.\n if (!trianglePlaneArray) {\n trianglePlaneArray = [];\n }\n if (!trianglePlaneArray[faceIndex]) {\n trianglePlaneArray[faceIndex] = new Plane(0, 0, 0, 0);\n trianglePlaneArray[faceIndex].copyFromPoints(p1, p2, p3);\n }\n const trianglePlane = trianglePlaneArray[faceIndex];\n if (!hasMaterial && !trianglePlane.isFrontFacingTo(this._normalizedVelocity, 0)) {\n return;\n }\n const signedDistToTrianglePlane = trianglePlane.signedDistanceTo(this._basePoint);\n const normalDotVelocity = Vector3.Dot(trianglePlane.normal, this._velocity);\n // if DoubleSidedCheck is false(default), a double sided face will be consided 2 times.\n // if true, it discard the faces having normal not facing velocity\n if (Collider.DoubleSidedCheck && normalDotVelocity > 0.0001) {\n return;\n }\n if (normalDotVelocity == 0) {\n if (Math.abs(signedDistToTrianglePlane) >= 1.0) {\n return;\n }\n embeddedInPlane = true;\n t0 = 0;\n } else {\n t0 = (-1.0 - signedDistToTrianglePlane) / normalDotVelocity;\n let t1 = (1.0 - signedDistToTrianglePlane) / normalDotVelocity;\n if (t0 > t1) {\n const temp = t1;\n t1 = t0;\n t0 = temp;\n }\n if (t0 > 1.0 || t1 < 0.0) {\n return;\n }\n if (t0 < 0) {\n t0 = 0;\n }\n if (t0 > 1.0) {\n t0 = 1.0;\n }\n }\n this._collisionPoint.copyFromFloats(0, 0, 0);\n let found = false;\n let t = 1.0;\n if (!embeddedInPlane) {\n this._basePoint.subtractToRef(trianglePlane.normal, this._planeIntersectionPoint);\n this._velocity.scaleToRef(t0, this._tempVector);\n this._planeIntersectionPoint.addInPlace(this._tempVector);\n if (this._checkPointInTriangle(this._planeIntersectionPoint, p1, p2, p3, trianglePlane.normal)) {\n found = true;\n t = t0;\n this._collisionPoint.copyFrom(this._planeIntersectionPoint);\n }\n }\n if (!found) {\n let a = this._velocitySquaredLength;\n this._basePoint.subtractToRef(p1, this._tempVector);\n let b = 2.0 * Vector3.Dot(this._velocity, this._tempVector);\n let c = this._tempVector.lengthSquared() - 1.0;\n let lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n t = lowestRoot.root;\n found = true;\n this._collisionPoint.copyFrom(p1);\n }\n this._basePoint.subtractToRef(p2, this._tempVector);\n b = 2.0 * Vector3.Dot(this._velocity, this._tempVector);\n c = this._tempVector.lengthSquared() - 1.0;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n t = lowestRoot.root;\n found = true;\n this._collisionPoint.copyFrom(p2);\n }\n this._basePoint.subtractToRef(p3, this._tempVector);\n b = 2.0 * Vector3.Dot(this._velocity, this._tempVector);\n c = this._tempVector.lengthSquared() - 1.0;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n t = lowestRoot.root;\n found = true;\n this._collisionPoint.copyFrom(p3);\n }\n p2.subtractToRef(p1, this._edge);\n p1.subtractToRef(this._basePoint, this._baseToVertex);\n let edgeSquaredLength = this._edge.lengthSquared();\n let edgeDotVelocity = Vector3.Dot(this._edge, this._velocity);\n let edgeDotBaseToVertex = Vector3.Dot(this._edge, this._baseToVertex);\n a = edgeSquaredLength * -this._velocitySquaredLength + edgeDotVelocity * edgeDotVelocity;\n b = 2 * (edgeSquaredLength * Vector3.Dot(this._velocity, this._baseToVertex) - edgeDotVelocity * edgeDotBaseToVertex);\n c = edgeSquaredLength * (1.0 - this._baseToVertex.lengthSquared()) + edgeDotBaseToVertex * edgeDotBaseToVertex;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n const f = (edgeDotVelocity * lowestRoot.root - edgeDotBaseToVertex) / edgeSquaredLength;\n if (f >= 0.0 && f <= 1.0) {\n t = lowestRoot.root;\n found = true;\n this._edge.scaleInPlace(f);\n p1.addToRef(this._edge, this._collisionPoint);\n }\n }\n p3.subtractToRef(p2, this._edge);\n p2.subtractToRef(this._basePoint, this._baseToVertex);\n edgeSquaredLength = this._edge.lengthSquared();\n edgeDotVelocity = Vector3.Dot(this._edge, this._velocity);\n edgeDotBaseToVertex = Vector3.Dot(this._edge, this._baseToVertex);\n a = edgeSquaredLength * -this._velocitySquaredLength + edgeDotVelocity * edgeDotVelocity;\n b = 2 * (edgeSquaredLength * Vector3.Dot(this._velocity, this._baseToVertex) - edgeDotVelocity * edgeDotBaseToVertex);\n c = edgeSquaredLength * (1.0 - this._baseToVertex.lengthSquared()) + edgeDotBaseToVertex * edgeDotBaseToVertex;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n const f = (edgeDotVelocity * lowestRoot.root - edgeDotBaseToVertex) / edgeSquaredLength;\n if (f >= 0.0 && f <= 1.0) {\n t = lowestRoot.root;\n found = true;\n this._edge.scaleInPlace(f);\n p2.addToRef(this._edge, this._collisionPoint);\n }\n }\n p1.subtractToRef(p3, this._edge);\n p3.subtractToRef(this._basePoint, this._baseToVertex);\n edgeSquaredLength = this._edge.lengthSquared();\n edgeDotVelocity = Vector3.Dot(this._edge, this._velocity);\n edgeDotBaseToVertex = Vector3.Dot(this._edge, this._baseToVertex);\n a = edgeSquaredLength * -this._velocitySquaredLength + edgeDotVelocity * edgeDotVelocity;\n b = 2 * (edgeSquaredLength * Vector3.Dot(this._velocity, this._baseToVertex) - edgeDotVelocity * edgeDotBaseToVertex);\n c = edgeSquaredLength * (1.0 - this._baseToVertex.lengthSquared()) + edgeDotBaseToVertex * edgeDotBaseToVertex;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n const f = (edgeDotVelocity * lowestRoot.root - edgeDotBaseToVertex) / edgeSquaredLength;\n if (f >= 0.0 && f <= 1.0) {\n t = lowestRoot.root;\n found = true;\n this._edge.scaleInPlace(f);\n p3.addToRef(this._edge, this._collisionPoint);\n }\n }\n }\n if (found) {\n const distToCollisionSquared = t * t * this._velocitySquaredLength;\n if (!this.collisionFound || distToCollisionSquared < this._nearestDistanceSquared) {\n // if collisionResponse is false, collision is not found but the collidedMesh is set anyway.\n // onCollide observable are triggered if collideMesh is set\n // this allow trigger volumes to be created.\n if (hostMesh.collisionResponse) {\n if (!this.intersectionPoint) {\n this.intersectionPoint = this._collisionPoint.clone();\n } else {\n this.intersectionPoint.copyFrom(this._collisionPoint);\n }\n this._nearestDistanceSquared = distToCollisionSquared;\n this._nearestDistance = Math.sqrt(distToCollisionSquared);\n this.collisionFound = true;\n }\n this.collidedMesh = hostMesh;\n }\n }\n }\n /**\n * @internal\n */\n _collide(trianglePlaneArray, pts, indices, indexStart, indexEnd, decal, hasMaterial, hostMesh, invertTriangles, triangleStrip = false) {\n if (triangleStrip) {\n if (!indices || indices.length === 0) {\n for (let i = 0; i < pts.length - 2; i += 1) {\n const p1 = pts[i];\n const p2 = pts[i + 1];\n const p3 = pts[i + 2];\n // stay defensive and don't check against undefined positions.\n if (!p1 || !p2 || !p3) {\n continue;\n }\n // Handles strip faces one on two is reversed\n if ((invertTriangles ? 1 : 0) ^ i % 2) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n } else {\n this._testTriangle(i, trianglePlaneArray, p2, p1, p3, hasMaterial, hostMesh);\n }\n }\n } else {\n for (let i = indexStart; i < indexEnd - 2; i += 1) {\n const indexA = indices[i];\n const indexB = indices[i + 1];\n const indexC = indices[i + 2];\n if (indexC === 0xffffffff) {\n i += 2;\n continue;\n }\n const p1 = pts[indexA];\n const p2 = pts[indexB];\n const p3 = pts[indexC];\n // stay defensive and don't check against undefined positions.\n if (!p1 || !p2 || !p3) {\n continue;\n }\n // Handles strip faces one on two is reversed\n if ((invertTriangles ? 1 : 0) ^ i % 2) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n } else {\n this._testTriangle(i, trianglePlaneArray, p2, p1, p3, hasMaterial, hostMesh);\n }\n }\n }\n } else if (!indices || indices.length === 0) {\n for (let i = 0; i < pts.length; i += 3) {\n const p1 = pts[i];\n const p2 = pts[i + 1];\n const p3 = pts[i + 2];\n if (invertTriangles) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n } else {\n this._testTriangle(i, trianglePlaneArray, p3, p2, p1, hasMaterial, hostMesh);\n }\n }\n } else {\n for (let i = indexStart; i < indexEnd; i += 3) {\n const p1 = pts[indices[i] - decal];\n const p2 = pts[indices[i + 1] - decal];\n const p3 = pts[indices[i + 2] - decal];\n if (invertTriangles) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n } else {\n this._testTriangle(i, trianglePlaneArray, p3, p2, p1, hasMaterial, hostMesh);\n }\n }\n }\n }\n /**\n * @internal\n */\n _getResponse(pos, vel) {\n pos.addToRef(vel, this._destinationPoint);\n vel.scaleInPlace(this._nearestDistance / vel.length());\n this._basePoint.addToRef(vel, pos);\n pos.subtractToRef(this.intersectionPoint, this._slidePlaneNormal);\n this._slidePlaneNormal.normalize();\n this._slidePlaneNormal.scaleToRef(this._epsilon, this._displacementVector);\n pos.addInPlace(this._displacementVector);\n this.intersectionPoint.addInPlace(this._displacementVector);\n this._slidePlaneNormal.scaleInPlace(Plane.SignedDistanceToPlaneFromPositionAndNormal(this.intersectionPoint, this._slidePlaneNormal, this._destinationPoint));\n this._destinationPoint.subtractInPlace(this._slidePlaneNormal);\n this._destinationPoint.subtractToRef(this.intersectionPoint, vel);\n }\n}\n/**\n * If true, it check for double sided faces and only returns 1 collision instead of 2\n */\nCollider.DoubleSidedCheck = false;","map":{"version":3,"names":["Vector3","Plane","intersectBoxAASphere","boxMin","boxMax","sphereCenter","sphereRadius","x","y","z","getLowestRoot","result","root","found","a","b","c","maxR","determinant","sqrtD","Math","sqrt","r1","r2","temp","Collider","constructor","_collisionPoint","Zero","_planeIntersectionPoint","_tempVector","_tempVector2","_tempVector3","_tempVector4","_edge","_baseToVertex","_destinationPoint","_slidePlaneNormal","_displacementVector","_radius","One","_retry","_basePointWorld","_velocityWorld","_normalizedVelocity","_collisionMask","collisionMask","mask","isNaN","slidePlaneNormal","_initialize","source","dir","e","_velocity","_velocitySquaredLength","lengthSquared","len","copyFromFloats","_x","_y","_z","scaleToRef","_basePoint","multiplyToRef","_velocityWorldLength","length","_epsilon","collisionFound","_checkPointInTriangle","point","pa","pb","pc","n","subtractToRef","CrossToRef","d","Dot","_canDoCollision","vecMin","vecMax","distance","Distance","max","_testTriangle","faceIndex","trianglePlaneArray","p1","p2","p3","hasMaterial","hostMesh","t0","embeddedInPlane","copyFromPoints","trianglePlane","isFrontFacingTo","signedDistToTrianglePlane","signedDistanceTo","normalDotVelocity","normal","DoubleSidedCheck","abs","t1","t","addInPlace","copyFrom","lowestRoot","edgeSquaredLength","edgeDotVelocity","edgeDotBaseToVertex","f","scaleInPlace","addToRef","distToCollisionSquared","_nearestDistanceSquared","collisionResponse","intersectionPoint","clone","_nearestDistance","collidedMesh","_collide","pts","indices","indexStart","indexEnd","decal","invertTriangles","triangleStrip","i","indexA","indexB","indexC","_getResponse","pos","vel","normalize","SignedDistanceToPlaneFromPositionAndNormal","subtractInPlace"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Collisions/collider.js"],"sourcesContent":["import { Vector3 } from \"../Maths/math.vector.js\";\nimport { Plane } from \"../Maths/math.plane.js\";\nconst intersectBoxAASphere = (boxMin, boxMax, sphereCenter, sphereRadius) => {\n if (boxMin.x > sphereCenter.x + sphereRadius) {\n return false;\n }\n if (sphereCenter.x - sphereRadius > boxMax.x) {\n return false;\n }\n if (boxMin.y > sphereCenter.y + sphereRadius) {\n return false;\n }\n if (sphereCenter.y - sphereRadius > boxMax.y) {\n return false;\n }\n if (boxMin.z > sphereCenter.z + sphereRadius) {\n return false;\n }\n if (sphereCenter.z - sphereRadius > boxMax.z) {\n return false;\n }\n return true;\n};\nconst getLowestRoot = (function () {\n const result = { root: 0, found: false };\n return function (a, b, c, maxR) {\n result.root = 0;\n result.found = false;\n const determinant = b * b - 4.0 * a * c;\n if (determinant < 0) {\n return result;\n }\n const sqrtD = Math.sqrt(determinant);\n let r1 = (-b - sqrtD) / (2.0 * a);\n let r2 = (-b + sqrtD) / (2.0 * a);\n if (r1 > r2) {\n const temp = r2;\n r2 = r1;\n r1 = temp;\n }\n if (r1 > 0 && r1 < maxR) {\n result.root = r1;\n result.found = true;\n return result;\n }\n if (r2 > 0 && r2 < maxR) {\n result.root = r2;\n result.found = true;\n return result;\n }\n return result;\n };\n})();\n/** @internal */\nexport class Collider {\n constructor() {\n // Implementation of the \"Improved Collision detection and Response\" algorithm proposed by Kasper Fauerby\n // https://www.peroxide.dk/papers/collision/collision.pdf\n this._collisionPoint = Vector3.Zero();\n this._planeIntersectionPoint = Vector3.Zero();\n this._tempVector = Vector3.Zero();\n this._tempVector2 = Vector3.Zero();\n this._tempVector3 = Vector3.Zero();\n this._tempVector4 = Vector3.Zero();\n this._edge = Vector3.Zero();\n this._baseToVertex = Vector3.Zero();\n this._destinationPoint = Vector3.Zero();\n this._slidePlaneNormal = Vector3.Zero();\n this._displacementVector = Vector3.Zero();\n /** @internal */\n this._radius = Vector3.One();\n /** @internal */\n this._retry = 0;\n /** @internal */\n this._basePointWorld = Vector3.Zero();\n this._velocityWorld = Vector3.Zero();\n this._normalizedVelocity = Vector3.Zero();\n this._collisionMask = -1;\n }\n get collisionMask() {\n return this._collisionMask;\n }\n set collisionMask(mask) {\n this._collisionMask = !isNaN(mask) ? mask : -1;\n }\n /**\n * Gets the plane normal used to compute the sliding response (in local space)\n */\n get slidePlaneNormal() {\n return this._slidePlaneNormal;\n }\n // Methods\n /**\n * @internal\n */\n _initialize(source, dir, e) {\n this._velocity = dir;\n this._velocitySquaredLength = this._velocity.lengthSquared();\n const len = Math.sqrt(this._velocitySquaredLength);\n if (len === 0 || len === 1.0) {\n this._normalizedVelocity.copyFromFloats(dir._x, dir._y, dir._z);\n }\n else {\n dir.scaleToRef(1.0 / len, this._normalizedVelocity);\n }\n this._basePoint = source;\n source.multiplyToRef(this._radius, this._basePointWorld);\n dir.multiplyToRef(this._radius, this._velocityWorld);\n this._velocityWorldLength = this._velocityWorld.length();\n this._epsilon = e;\n this.collisionFound = false;\n }\n /**\n * @internal\n */\n _checkPointInTriangle(point, pa, pb, pc, n) {\n pa.subtractToRef(point, this._tempVector);\n pb.subtractToRef(point, this._tempVector2);\n Vector3.CrossToRef(this._tempVector, this._tempVector2, this._tempVector4);\n let d = Vector3.Dot(this._tempVector4, n);\n if (d < 0) {\n return false;\n }\n pc.subtractToRef(point, this._tempVector3);\n Vector3.CrossToRef(this._tempVector2, this._tempVector3, this._tempVector4);\n d = Vector3.Dot(this._tempVector4, n);\n if (d < 0) {\n return false;\n }\n Vector3.CrossToRef(this._tempVector3, this._tempVector, this._tempVector4);\n d = Vector3.Dot(this._tempVector4, n);\n return d >= 0;\n }\n /**\n * @internal\n */\n _canDoCollision(sphereCenter, sphereRadius, vecMin, vecMax) {\n const distance = Vector3.Distance(this._basePointWorld, sphereCenter);\n const max = Math.max(this._radius.x, this._radius.y, this._radius.z);\n if (distance > this._velocityWorldLength + max + sphereRadius) {\n return false;\n }\n if (!intersectBoxAASphere(vecMin, vecMax, this._basePointWorld, this._velocityWorldLength + max)) {\n return false;\n }\n return true;\n }\n /**\n * @internal\n */\n _testTriangle(faceIndex, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh) {\n let t0;\n let embeddedInPlane = false;\n //defensive programming, actually not needed.\n if (!trianglePlaneArray) {\n trianglePlaneArray = [];\n }\n if (!trianglePlaneArray[faceIndex]) {\n trianglePlaneArray[faceIndex] = new Plane(0, 0, 0, 0);\n trianglePlaneArray[faceIndex].copyFromPoints(p1, p2, p3);\n }\n const trianglePlane = trianglePlaneArray[faceIndex];\n if (!hasMaterial && !trianglePlane.isFrontFacingTo(this._normalizedVelocity, 0)) {\n return;\n }\n const signedDistToTrianglePlane = trianglePlane.signedDistanceTo(this._basePoint);\n const normalDotVelocity = Vector3.Dot(trianglePlane.normal, this._velocity);\n // if DoubleSidedCheck is false(default), a double sided face will be consided 2 times.\n // if true, it discard the faces having normal not facing velocity\n if (Collider.DoubleSidedCheck && normalDotVelocity > 0.0001) {\n return;\n }\n if (normalDotVelocity == 0) {\n if (Math.abs(signedDistToTrianglePlane) >= 1.0) {\n return;\n }\n embeddedInPlane = true;\n t0 = 0;\n }\n else {\n t0 = (-1.0 - signedDistToTrianglePlane) / normalDotVelocity;\n let t1 = (1.0 - signedDistToTrianglePlane) / normalDotVelocity;\n if (t0 > t1) {\n const temp = t1;\n t1 = t0;\n t0 = temp;\n }\n if (t0 > 1.0 || t1 < 0.0) {\n return;\n }\n if (t0 < 0) {\n t0 = 0;\n }\n if (t0 > 1.0) {\n t0 = 1.0;\n }\n }\n this._collisionPoint.copyFromFloats(0, 0, 0);\n let found = false;\n let t = 1.0;\n if (!embeddedInPlane) {\n this._basePoint.subtractToRef(trianglePlane.normal, this._planeIntersectionPoint);\n this._velocity.scaleToRef(t0, this._tempVector);\n this._planeIntersectionPoint.addInPlace(this._tempVector);\n if (this._checkPointInTriangle(this._planeIntersectionPoint, p1, p2, p3, trianglePlane.normal)) {\n found = true;\n t = t0;\n this._collisionPoint.copyFrom(this._planeIntersectionPoint);\n }\n }\n if (!found) {\n let a = this._velocitySquaredLength;\n this._basePoint.subtractToRef(p1, this._tempVector);\n let b = 2.0 * Vector3.Dot(this._velocity, this._tempVector);\n let c = this._tempVector.lengthSquared() - 1.0;\n let lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n t = lowestRoot.root;\n found = true;\n this._collisionPoint.copyFrom(p1);\n }\n this._basePoint.subtractToRef(p2, this._tempVector);\n b = 2.0 * Vector3.Dot(this._velocity, this._tempVector);\n c = this._tempVector.lengthSquared() - 1.0;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n t = lowestRoot.root;\n found = true;\n this._collisionPoint.copyFrom(p2);\n }\n this._basePoint.subtractToRef(p3, this._tempVector);\n b = 2.0 * Vector3.Dot(this._velocity, this._tempVector);\n c = this._tempVector.lengthSquared() - 1.0;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n t = lowestRoot.root;\n found = true;\n this._collisionPoint.copyFrom(p3);\n }\n p2.subtractToRef(p1, this._edge);\n p1.subtractToRef(this._basePoint, this._baseToVertex);\n let edgeSquaredLength = this._edge.lengthSquared();\n let edgeDotVelocity = Vector3.Dot(this._edge, this._velocity);\n let edgeDotBaseToVertex = Vector3.Dot(this._edge, this._baseToVertex);\n a = edgeSquaredLength * -this._velocitySquaredLength + edgeDotVelocity * edgeDotVelocity;\n b = 2 * (edgeSquaredLength * Vector3.Dot(this._velocity, this._baseToVertex) - edgeDotVelocity * edgeDotBaseToVertex);\n c = edgeSquaredLength * (1.0 - this._baseToVertex.lengthSquared()) + edgeDotBaseToVertex * edgeDotBaseToVertex;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n const f = (edgeDotVelocity * lowestRoot.root - edgeDotBaseToVertex) / edgeSquaredLength;\n if (f >= 0.0 && f <= 1.0) {\n t = lowestRoot.root;\n found = true;\n this._edge.scaleInPlace(f);\n p1.addToRef(this._edge, this._collisionPoint);\n }\n }\n p3.subtractToRef(p2, this._edge);\n p2.subtractToRef(this._basePoint, this._baseToVertex);\n edgeSquaredLength = this._edge.lengthSquared();\n edgeDotVelocity = Vector3.Dot(this._edge, this._velocity);\n edgeDotBaseToVertex = Vector3.Dot(this._edge, this._baseToVertex);\n a = edgeSquaredLength * -this._velocitySquaredLength + edgeDotVelocity * edgeDotVelocity;\n b = 2 * (edgeSquaredLength * Vector3.Dot(this._velocity, this._baseToVertex) - edgeDotVelocity * edgeDotBaseToVertex);\n c = edgeSquaredLength * (1.0 - this._baseToVertex.lengthSquared()) + edgeDotBaseToVertex * edgeDotBaseToVertex;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n const f = (edgeDotVelocity * lowestRoot.root - edgeDotBaseToVertex) / edgeSquaredLength;\n if (f >= 0.0 && f <= 1.0) {\n t = lowestRoot.root;\n found = true;\n this._edge.scaleInPlace(f);\n p2.addToRef(this._edge, this._collisionPoint);\n }\n }\n p1.subtractToRef(p3, this._edge);\n p3.subtractToRef(this._basePoint, this._baseToVertex);\n edgeSquaredLength = this._edge.lengthSquared();\n edgeDotVelocity = Vector3.Dot(this._edge, this._velocity);\n edgeDotBaseToVertex = Vector3.Dot(this._edge, this._baseToVertex);\n a = edgeSquaredLength * -this._velocitySquaredLength + edgeDotVelocity * edgeDotVelocity;\n b = 2 * (edgeSquaredLength * Vector3.Dot(this._velocity, this._baseToVertex) - edgeDotVelocity * edgeDotBaseToVertex);\n c = edgeSquaredLength * (1.0 - this._baseToVertex.lengthSquared()) + edgeDotBaseToVertex * edgeDotBaseToVertex;\n lowestRoot = getLowestRoot(a, b, c, t);\n if (lowestRoot.found) {\n const f = (edgeDotVelocity * lowestRoot.root - edgeDotBaseToVertex) / edgeSquaredLength;\n if (f >= 0.0 && f <= 1.0) {\n t = lowestRoot.root;\n found = true;\n this._edge.scaleInPlace(f);\n p3.addToRef(this._edge, this._collisionPoint);\n }\n }\n }\n if (found) {\n const distToCollisionSquared = t * t * this._velocitySquaredLength;\n if (!this.collisionFound || distToCollisionSquared < this._nearestDistanceSquared) {\n // if collisionResponse is false, collision is not found but the collidedMesh is set anyway.\n // onCollide observable are triggered if collideMesh is set\n // this allow trigger volumes to be created.\n if (hostMesh.collisionResponse) {\n if (!this.intersectionPoint) {\n this.intersectionPoint = this._collisionPoint.clone();\n }\n else {\n this.intersectionPoint.copyFrom(this._collisionPoint);\n }\n this._nearestDistanceSquared = distToCollisionSquared;\n this._nearestDistance = Math.sqrt(distToCollisionSquared);\n this.collisionFound = true;\n }\n this.collidedMesh = hostMesh;\n }\n }\n }\n /**\n * @internal\n */\n _collide(trianglePlaneArray, pts, indices, indexStart, indexEnd, decal, hasMaterial, hostMesh, invertTriangles, triangleStrip = false) {\n if (triangleStrip) {\n if (!indices || indices.length === 0) {\n for (let i = 0; i < pts.length - 2; i += 1) {\n const p1 = pts[i];\n const p2 = pts[i + 1];\n const p3 = pts[i + 2];\n // stay defensive and don't check against undefined positions.\n if (!p1 || !p2 || !p3) {\n continue;\n }\n // Handles strip faces one on two is reversed\n if ((invertTriangles ? 1 : 0) ^ i % 2) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n }\n else {\n this._testTriangle(i, trianglePlaneArray, p2, p1, p3, hasMaterial, hostMesh);\n }\n }\n }\n else {\n for (let i = indexStart; i < indexEnd - 2; i += 1) {\n const indexA = indices[i];\n const indexB = indices[i + 1];\n const indexC = indices[i + 2];\n if (indexC === 0xffffffff) {\n i += 2;\n continue;\n }\n const p1 = pts[indexA];\n const p2 = pts[indexB];\n const p3 = pts[indexC];\n // stay defensive and don't check against undefined positions.\n if (!p1 || !p2 || !p3) {\n continue;\n }\n // Handles strip faces one on two is reversed\n if ((invertTriangles ? 1 : 0) ^ i % 2) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n }\n else {\n this._testTriangle(i, trianglePlaneArray, p2, p1, p3, hasMaterial, hostMesh);\n }\n }\n }\n }\n else if (!indices || indices.length === 0) {\n for (let i = 0; i < pts.length; i += 3) {\n const p1 = pts[i];\n const p2 = pts[i + 1];\n const p3 = pts[i + 2];\n if (invertTriangles) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n }\n else {\n this._testTriangle(i, trianglePlaneArray, p3, p2, p1, hasMaterial, hostMesh);\n }\n }\n }\n else {\n for (let i = indexStart; i < indexEnd; i += 3) {\n const p1 = pts[indices[i] - decal];\n const p2 = pts[indices[i + 1] - decal];\n const p3 = pts[indices[i + 2] - decal];\n if (invertTriangles) {\n this._testTriangle(i, trianglePlaneArray, p1, p2, p3, hasMaterial, hostMesh);\n }\n else {\n this._testTriangle(i, trianglePlaneArray, p3, p2, p1, hasMaterial, hostMesh);\n }\n }\n }\n }\n /**\n * @internal\n */\n _getResponse(pos, vel) {\n pos.addToRef(vel, this._destinationPoint);\n vel.scaleInPlace(this._nearestDistance / vel.length());\n this._basePoint.addToRef(vel, pos);\n pos.subtractToRef(this.intersectionPoint, this._slidePlaneNormal);\n this._slidePlaneNormal.normalize();\n this._slidePlaneNormal.scaleToRef(this._epsilon, this._displacementVector);\n pos.addInPlace(this._displacementVector);\n this.intersectionPoint.addInPlace(this._displacementVector);\n this._slidePlaneNormal.scaleInPlace(Plane.SignedDistanceToPlaneFromPositionAndNormal(this.intersectionPoint, this._slidePlaneNormal, this._destinationPoint));\n this._destinationPoint.subtractInPlace(this._slidePlaneNormal);\n this._destinationPoint.subtractToRef(this.intersectionPoint, vel);\n }\n}\n/**\n * If true, it check for double sided faces and only returns 1 collision instead of 2\n */\nCollider.DoubleSidedCheck = false;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}