{"version":3,"file":"Capsule.cjs","sources":["../../src/math/Capsule.js"],"sourcesContent":["import { Vector3 } from 'three'\n\nconst _v1 = new Vector3()\nconst _v2 = new Vector3()\nconst _v3 = new Vector3()\n\nconst EPS = 1e-10\n\nclass Capsule {\n  constructor(start = new Vector3(0, 0, 0), end = new Vector3(0, 1, 0), radius = 1) {\n    this.start = start\n    this.end = end\n    this.radius = radius\n  }\n\n  clone() {\n    return new Capsule(this.start.clone(), this.end.clone(), this.radius)\n  }\n\n  set(start, end, radius) {\n    this.start.copy(start)\n    this.end.copy(end)\n    this.radius = radius\n  }\n\n  copy(capsule) {\n    this.start.copy(capsule.start)\n    this.end.copy(capsule.end)\n    this.radius = capsule.radius\n  }\n\n  getCenter(target) {\n    return target.copy(this.end).add(this.start).multiplyScalar(0.5)\n  }\n\n  translate(v) {\n    this.start.add(v)\n    this.end.add(v)\n  }\n\n  checkAABBAxis(p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius) {\n    return (\n      (minx - p1x < radius || minx - p2x < radius) &&\n      (p1x - maxx < radius || p2x - maxx < radius) &&\n      (miny - p1y < radius || miny - p2y < radius) &&\n      (p1y - maxy < radius || p2y - maxy < radius)\n    )\n  }\n\n  intersectsBox(box) {\n    return (\n      this.checkAABBAxis(\n        this.start.x,\n        this.start.y,\n        this.end.x,\n        this.end.y,\n        box.min.x,\n        box.max.x,\n        box.min.y,\n        box.max.y,\n        this.radius,\n      ) &&\n      this.checkAABBAxis(\n        this.start.x,\n        this.start.z,\n        this.end.x,\n        this.end.z,\n        box.min.x,\n        box.max.x,\n        box.min.z,\n        box.max.z,\n        this.radius,\n      ) &&\n      this.checkAABBAxis(\n        this.start.y,\n        this.start.z,\n        this.end.y,\n        this.end.z,\n        box.min.y,\n        box.max.y,\n        box.min.z,\n        box.max.z,\n        this.radius,\n      )\n    )\n  }\n\n  lineLineMinimumPoints(line1, line2) {\n    const r = _v1.copy(line1.end).sub(line1.start)\n    const s = _v2.copy(line2.end).sub(line2.start)\n    const w = _v3.copy(line2.start).sub(line1.start)\n\n    const a = r.dot(s),\n      b = r.dot(r),\n      c = s.dot(s),\n      d = s.dot(w),\n      e = r.dot(w)\n\n    let t1, t2\n    const divisor = b * c - a * a\n\n    if (Math.abs(divisor) < EPS) {\n      const d1 = -d / c\n      const d2 = (a - d) / c\n\n      if (Math.abs(d1 - 0.5) < Math.abs(d2 - 0.5)) {\n        t1 = 0\n        t2 = d1\n      } else {\n        t1 = 1\n        t2 = d2\n      }\n    } else {\n      t1 = (d * a + e * c) / divisor\n      t2 = (t1 * a - d) / c\n    }\n\n    t2 = Math.max(0, Math.min(1, t2))\n    t1 = Math.max(0, Math.min(1, t1))\n\n    const point1 = r.multiplyScalar(t1).add(line1.start)\n    const point2 = s.multiplyScalar(t2).add(line2.start)\n\n    return [point1, point2]\n  }\n}\n\nexport { Capsule }\n"],"names":["Vector3"],"mappings":"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"}