main.js.map for 2d raycaster demo

 avatar
unknown
json
a year ago
48 kB
6
Indexable
{
  "version": 3,
  "sources": ["../src/maths/vector.ts", "../src/maths/vector2.ts", "../src/maths/volumes/bounding_volume.ts", "../src/maths/volumes/bounding_box.ts", "../src/maths/physics/aabb.ts", "../src/maths/physics/cast.ts", "../src/maths/physics/raycaster.ts", "../src/maths/mod.ts", "../src/main.ts"],
  "sourcesContent": ["export abstract class AbstractVector {\n\tabstract absolute(): this;\n\tabstract add(v: AbstractVector | number): this;\n\tabstract angle(other?: AbstractVector): number;\n\tabstract aspect(): number;\n\tabstract ceil(): this;\n\tabstract centre(other?: AbstractVector): this;\n\tabstract clamp(min: number, max: number): this;\n\tabstract clone(): this;\n\tabstract copy(other: AbstractVector): this;\n\tabstract cross(other: AbstractVector): number;\n\tabstract direction(other: AbstractVector): this;\n\tabstract distance(other: AbstractVector): number;\n\tabstract distanceSquared(other: AbstractVector): number;\n\tabstract dot(other: AbstractVector): number;\n\tabstract diverge(other: AbstractVector): this;\n\tabstract equals(other: AbstractVector): boolean;\n\tabstract floor(): this;\n\tabstract fromAngle(angle: number): this;\n\tabstract fromArray(elements: number[]): this;\n\tabstract gradient(other: AbstractVector): number;\n\tabstract isFinite(): boolean;\n\tabstract isNaN(): boolean;\n\tabstract isNormalised(): boolean;\n\tabstract isUnit(): boolean;\n\tabstract isZero(): boolean;\n\tabstract length(): number;\n\tabstract lengthSquared(): number;\n\tabstract lerp(other: AbstractVector, alpha: number): this;\n\tabstract max(other: AbstractVector): this;\n\tabstract midpoint(other: AbstractVector): this;\n\tabstract min(other: AbstractVector): this;\n\tabstract multiply(v: AbstractVector | number): this;\n\tabstract negate(): this;\n\tabstract normal(other?: AbstractVector): this;\n\tabstract normalise(): this;\n\tabstract perpendicular(): this;\n\tabstract project(other: AbstractVector): this;\n\tabstract reflect(normal: AbstractVector): this;\n\tabstract reject(other: AbstractVector): this;\n\tabstract remainder(other: AbstractVector): this;\n\tabstract rotate(angle: number): this;\n\tabstract rotateAround(centre: AbstractVector, angle: number): this;\n\tabstract round(): this;\n\tabstract polar(length: number, angle: number, out?: AbstractVector): this;\n\tabstract scale(scalar: number): this;\n\tabstract set(other: AbstractVector | number[]): this;\n\tabstract setScalar(scalar: number): this;\n\tabstract sign(): this;\n\tabstract slerp(other: AbstractVector, alpha: number): this;\n\tabstract subtract(v: AbstractVector): this;\n\tabstract substractScalar(scalar: number): this;\n\tabstract toArray(): number[];\n\tabstract unit(): this;\n\tabstract zero(): this;\n\n\ttoString(): string {\n\t\treturn `${this.constructor.name}(${this.toArray().join(\", \")})`;\n\t}\n}\n", "import { AbstractVector } from \"./vector.ts\";\n\nexport class Vector2 extends AbstractVector {\n\tconstructor(public x = 0, public y = 0) {\n\t\tsuper();\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\tstatic get UP(): Readonly<Vector2> {\n\t\treturn new Vector2(0, -1);\n\t}\n\n\tstatic get DOWN(): Readonly<Vector2> {\n\t\treturn new Vector2(0, 1);\n\t}\n\n\tstatic get LEFT(): Readonly<Vector2> {\n\t\treturn new Vector2(-1, 0);\n\t}\n\n\tstatic get RIGHT(): Readonly<Vector2> {\n\t\treturn new Vector2(1, 0);\n\t}\n\n\tstatic get TOP_LEFT(): Readonly<Vector2> {\n\t\treturn new Vector2(-1, 1);\n\t}\n\n\tstatic get TOP_RIGHT(): Readonly<Vector2> {\n\t\treturn new Vector2(1, 1);\n\t}\n\n\tstatic get BOTTOM_LEFT(): Readonly<Vector2> {\n\t\treturn new Vector2(-1, -1);\n\t}\n\n\tstatic get BOTTOM_RIGHT(): Readonly<Vector2> {\n\t\treturn new Vector2(1, -1);\n\t}\n\n\tstatic get ZERO(): Readonly<Vector2> {\n\t\treturn new Vector2(0, 0);\n\t}\n\n\toverride absolute(): this {\n\t\tthis.x = Math.abs(this.x);\n\t\tthis.y = Math.abs(this.y);\n\n\t\treturn this;\n\t}\n\n\toverride add(other: Vector2): this {\n\t\tthis.x += other.x;\n\t\tthis.y += other.y;\n\n\t\treturn this;\n\t}\n\n\toverride addScalar(scalar: number): this {\n\t\tthis.x += scalar;\n\t\tthis.y += scalar;\n\n\t\treturn this;\n\t}\n\n\toverride angle(other?: Vector2): number {\n\t\tif (other === undefined) return Math.atan2(this.y, this.x);\n\n\t\treturn Math.atan2(other.y - this.y, other.x - this.x);\n\t}\n\n\toverride aspect(): number {\n\t\treturn this.x / this.y;\n\t}\n\n\toverride centre(other?: Vector2): this {\n\t\tif (other) {\n\t\t\tthis.x = (this.x + other.x) / 2;\n\t\t\tthis.y = (this.y + other.y) / 2;\n\n\t\t\treturn this;\n\t\t}\n\n\t\tthis.x /= 2;\n\t\tthis.y /= 2;\n\n\t\treturn this;\n\t}\n\n\toverride ceil(): this {\n\t\tthis.x = Math.ceil(this.x);\n\t\tthis.y = Math.ceil(this.y);\n\n\t\treturn this;\n\t}\n\n\toverride clamp(min: number, max: number): this {\n\t\tthis.x = Math.min(Math.max(this.x, min), max);\n\t\tthis.y = Math.min(Math.max(this.y, min), max);\n\n\t\treturn this;\n\t}\n\n\toverride clone(): this {\n\t\treturn new Vector2(this.x, this.y) as this;\n\t}\n\n\toverride copy(other: Vector2): this {\n\t\tthis.x = other.x;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\t}\n\n\toverride cross(other: Vector2): number {\n\t\treturn (this.x * other.y) - (this.y * other.x);\n\t}\n\n\toverride direction(other: Vector2): this {\n\t\tthis.x = other.x - this.x;\n\t\tthis.y = other.y - this.y;\n\n\t\treturn this;\n\t}\n\n\toverride distance(other: Vector2): number {\n\t\treturn Math.hypot(other.x - this.x, other.y - this.y);\n\t}\n\n\toverride distanceSquared(other: Vector2): number {\n\t\treturn ((other.x - this.x) ** 2) + ((other.y - this.y) ** 2);\n\t}\n\n\toverride diverge(other: Vector2): this {\n\t\tthis.x = other.x - this.x;\n\t\tthis.y = other.y - this.y;\n\n\t\treturn this;\n\t}\n\n\toverride dot(other: Vector2): number {\n\t\treturn (this.x * other.x) + (this.y * other.y);\n\t}\n\n\toverride equals(other: Vector2): boolean {\n\t\treturn (\n\t\t\tthis.x === other.x &&\n\t\t\tthis.y === other.y\n\t\t);\n\t}\n\n\toverride floor(): this {\n\t\tthis.x = Math.floor(this.x);\n\t\tthis.y = Math.floor(this.y);\n\n\t\treturn this;\n\t}\n\n\toverride fromAngle(angle: number): this {\n\t\tthis.x = Math.cos(angle);\n\t\tthis.y = Math.sin(angle);\n\n\t\treturn this;\n\t}\n\n\toverride fromArray(elements: [number, number]): this {\n\t\tthis.x = elements[0];\n\t\tthis.y = elements[1];\n\n\t\treturn this;\n\t}\n\n\toverride gradient(other: Vector2): number {\n\t\treturn (other.y - this.y) / (other.x - this.x);\n\t}\n\n\toverride isFinite(): boolean {\n\t\treturn Number.isFinite(this.x) && Number.isFinite(this.y);\n\t}\n\n\toverride isNaN(): boolean {\n\t\treturn Number.isNaN(this.x) || Number.isNaN(this.y);\n\t}\n\n\toverride isNormalised(): boolean {\n\t\treturn this.lengthSquared() === 1;\n\t}\n\n\toverride isUnit(): boolean {\n\t\treturn this.length() === 1;\n\t}\n\n\toverride isZero(): boolean {\n\t\treturn (\n\t\t\tthis.x === 0 &&\n\t\t\tthis.y === 0\n\t\t);\n\t}\n\n\toverride length(): number {\n\t\treturn Math.hypot(this.x, this.y);\n\t}\n\n\toverride lengthSquared(): number {\n\t\treturn (this.x ** 2) + (this.y ** 2);\n\t}\n\n\toverride lerp(other: Vector2, alpha: number): this {\n\t\tthis.x += (other.x - this.x) * alpha;\n\t\tthis.y += (other.y - this.y) * alpha;\n\n\t\treturn this;\n\t}\n\n\toverride max(other: Vector2): this {\n\t\tthis.x = Math.max(this.x, other.x);\n\t\tthis.y = Math.max(this.y, other.y);\n\n\t\treturn this;\n\t}\n\n\toverride midpoint(other: Vector2): this {\n\t\tthis.x = (this.x + other.x) / 2;\n\t\tthis.y = (this.y + other.y) / 2;\n\n\t\treturn this;\n\t}\n\n\toverride min(other: Vector2): this {\n\t\tthis.x = Math.min(this.x, other.x);\n\t\tthis.y = Math.min(this.y, other.y);\n\n\t\treturn this;\n\t}\n\n\toverride multiply(other: Vector2): this {\n\t\tthis.x *= other.x;\n\t\tthis.y *= other.y;\n\n\t\treturn this;\n\t}\n\n\toverride negate(): this {\n\t\tthis.x = -this.x;\n\t\tthis.y = -this.y;\n\n\t\treturn this;\n\t}\n\n\toverride normal(other?: Vector2): this {\n\t\tif (other) {\n\t\t\treturn this.centre(other).normal(other.centre(this));\n\t\t}\n\n\t\treturn this.fromArray([-this.y, this.x]).normalise();\n\t}\n\n\toverride normalise(): this {\n\t\tconst length = this.length();\n\n\t\tthis.x /= length;\n\t\tthis.y /= length;\n\n\t\treturn this;\n\t}\n\n\toverride perpendicular(): this {\n\t\tconst x = this.x;\n\n\t\tthis.x = -this.y;\n\t\tthis.y = x;\n\n\t\treturn this;\n\t}\n\n\toverride project(other: Vector2): this {\n\t\tlet scalar;\n\n\t\tif (this.isNormalised()) {\n\t\t\tscalar = this.dot(other);\n\t\t} else {\n\t\t\tscalar = this.dot(other) / other.lengthSquared();\n\t\t}\n\n\t\tthis.x = other.x * scalar;\n\t\tthis.y = other.y * scalar;\n\n\t\treturn this;\n\t}\n\n\toverride reflect(normal: Vector2): this {\n\t\tconst scalar = 2 * this.dot(normal);\n\n\t\tthis.x -= normal.x * scalar;\n\t\tthis.y -= normal.y * scalar;\n\n\t\treturn this;\n\t}\n\n\toverride reject(other: Vector2): this {\n\t\tlet scalar;\n\n\t\tif (this.isNormalised()) {\n\t\t\tscalar = this.dot(other);\n\t\t} else {\n\t\t\tscalar = this.dot(other) / other.lengthSquared();\n\t\t}\n\n\t\tthis.x -= other.x * scalar;\n\t\tthis.y -= other.y * scalar;\n\n\t\treturn this;\n\t}\n\n\toverride remainder(other: Vector2): this {\n\t\tthis.x %= other.x;\n\t\tthis.y %= other.y;\n\n\t\treturn this;\n\t}\n\n\toverride rotate(angle: number): this {\n\t\tconst cos = Math.cos(angle);\n\t\tconst sin = Math.sin(angle);\n\n\t\tconst x = this.x;\n\t\tconst y = this.y;\n\n\t\tthis.x = (x * cos) - (y * sin);\n\t\tthis.y = (x * sin) + (y * cos);\n\n\t\treturn this;\n\t}\n\n\toverride rotateAround(centre: Vector2, angle: number): this {\n\t\tconst cos = Math.cos(angle);\n\t\tconst sin = Math.sin(angle);\n\n\t\tconst x = this.x - centre.x;\n\t\tconst y = this.y - centre.y;\n\n\t\tthis.x = (x * cos) - (y * sin) + centre.x;\n\t\tthis.y = (x * sin) + (y * cos) + centre.y;\n\n\t\treturn this;\n\t}\n\n\toverride round(): this {\n\t\tthis.x = Math.round(this.x);\n\t\tthis.y = Math.round(this.y);\n\n\t\treturn this;\n\t}\n\n\toverride polar(length: number, angle: number, out?: Vector2): this {\n\t\tif (out === undefined) out = new Vector2();\n\n\t\tout.x = length * Math.cos(angle);\n\t\tout.y = length * Math.sin(angle);\n\n\t\treturn this;\n\t}\n\n\toverride scale(scalar: number): this {\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\t}\n\n\toverride set(v: Vector2 | [number, number]): this {\n\t\tif (v instanceof Vector2) {\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t} else {\n\t\t\tthis.x = v[0];\n\t\t\tthis.y = v[1];\n\t\t}\n\n\t\treturn this;\n\t}\n\n\toverride setScalar(scalar: number): this {\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\t}\n\n\toverride sign(): this {\n\t\tthis.x = Math.sign(this.x);\n\t\tthis.y = Math.sign(this.y);\n\n\t\treturn this;\n\t}\n\n\toverride slerp(other: Vector2, alpha: number): this {\n\t\tconst angle = this.angle(other);\n\n\t\tthis.x = Math.cos(angle) * alpha;\n\t\tthis.y = Math.sin(angle) * alpha;\n\n\t\treturn this;\n\t}\n\n\toverride subtract(v: Vector2): this {\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\t}\n\n\toverride substractScalar(scalar: number): this {\n\t\tthis.x -= scalar;\n\t\tthis.y -= scalar;\n\n\t\treturn this;\n\t}\n\n\toverride toArray(): [number, number] {\n\t\treturn [this.x, this.y];\n\t}\n\n\toverride unit(): this {\n\t\tconst length = this.length();\n\n\t\tthis.x /= length;\n\t\tthis.y /= length;\n\n\t\treturn this;\n\t}\n\n\toverride zero(): this {\n\t\tthis.x = 0;\n\t\tthis.y = 0;\n\n\t\treturn this;\n\t}\n\n\t*[Symbol.iterator](): Generator<number> {\n\t\tyield this.x;\n\t\tyield this.y;\n\t}\n}\n", "import type { AbstractVector } from \"../vector.ts\";\n\nexport abstract class AbstractBoundingVolume {\n\tabstract area(): number;\n\tabstract centre(other?: AbstractBoundingVolume): AbstractVector;\n\tabstract clone(): this;\n\tabstract combine(other: AbstractBoundingVolume): this;\n\tabstract contains(other: AbstractBoundingVolume): boolean;\n\tabstract copy(other: this): this;\n\tabstract difference(other: AbstractBoundingVolume): this;\n\tabstract equals(other: AbstractBoundingVolume): boolean;\n\tabstract fromArray(elements: number[]): this;\n\tabstract intersect(other: AbstractBoundingVolume): this;\n\tabstract intersects(other: AbstractBoundingVolume): boolean;\n\tabstract perimeter(): number;\n\tabstract toArray(): number[];\n\n\ttoString(): string {\n\t\treturn `${this.constructor.name}(${this.toArray().join(\", \")})`;\n\t}\n}\n", "import { Vector2 } from \"../vector2.ts\";\nimport { AbstractBoundingVolume } from \"./bounding_volume.ts\";\n\nexport class BoundingBox extends AbstractBoundingVolume {\n\tconstructor(\n\t\tpublic x = 0,\n\t\tpublic y = 0,\n\t\tpublic width = 1,\n\t\tpublic height = 1,\n\t) {\n\t\tsuper();\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\toverride area(): number {\n\t\treturn this.width * this.height;\n\t}\n\n\toverride centre(other?: BoundingBox): Vector2 {\n\t\tif (other) {\n\t\t\treturn new Vector2(\n\t\t\t\t(this.x + (this.width / 2)) + (other.x + (other.width / 2)),\n\t\t\t\t(this.y + (this.height / 2)) + (other.y + (other.height / 2)),\n\t\t\t);\n\t\t}\n\n\t\treturn new Vector2(this.x + this.width / 2, this.y + this.height / 2);\n\t}\n\n\toverride clone(): this {\n\t\treturn new BoundingBox(this.x, this.y, this.width, this.height) as this;\n\t}\n\n\toverride combine(other: BoundingBox): this {\n\t\tconst x = Math.min(this.x, other.x);\n\t\tconst y = Math.min(this.y, other.y);\n\t\tconst width = Math.max(this.x + this.width, other.x + other.width) - x;\n\t\tconst height = Math.max(this.y + this.height, other.y + other.height) - y;\n\n\t\treturn this.fromArray([x, y, width, height]);\n\t}\n\n\toverride contains(other: BoundingBox): boolean {\n\t\treturn (\n\t\t\tthis.x <= other.x &&\n\t\t\tthis.y <= other.y &&\n\t\t\tthis.x + this.width >= other.x + other.width &&\n\t\t\tthis.y + this.height >= other.y + other.height\n\t\t);\n\t}\n\n\toverride copy(other: BoundingBox): this {\n\t\tthis.x = other.x;\n\t\tthis.y = other.y;\n\t\tthis.width = other.width;\n\t\tthis.height = other.height;\n\n\t\treturn this;\n\t}\n\n\toverride difference(other: BoundingBox): this {\n\t\treturn this.fromArray([\n\t\t\tMath.min(this.x, other.x),\n\t\t\tMath.min(this.y, other.y),\n\t\t\tMath.max(this.x + this.width, other.x + other.width) - Math.min(\n\t\t\t\tthis.x,\n\t\t\t\tother.x,\n\t\t\t),\n\t\t\tMath.max(this.y + this.height, other.y + other.height) - Math.min(\n\t\t\t\tthis.y,\n\t\t\t\tother.y,\n\t\t\t),\n\t\t]);\n\t}\n\n\toverride equals(other: BoundingBox): boolean {\n\t\treturn (\n\t\t\tthis.x === other.x &&\n\t\t\tthis.y === other.y &&\n\t\t\tthis.width === other.width &&\n\t\t\tthis.height === other.height\n\t\t);\n\t}\n\n\toverride fromArray(elements: [number, number, number, number]): this {\n\t\tthis.x = elements[0];\n\t\tthis.y = elements[1];\n\t\tthis.width = elements[2];\n\t\tthis.height = elements[3];\n\n\t\treturn this;\n\t}\n\n\toverride intersect(other: BoundingBox): this {\n\t\tconst x0 = Math.max(this.x, other.x);\n\t\tconst y0 = Math.max(this.y, other.y);\n\t\tconst x1 = Math.min(this.x + this.width, other.x + other.width);\n\t\tconst y1 = Math.min(this.y + this.height, other.y + other.height);\n\n\t\tconst width = Math.max(0, x1 - x0);\n\t\tconst height = Math.max(0, y1 - y0);\n\n\t\treturn this.fromArray([x0, y0, width, height]);\n\t}\n\n\toverride intersects(other: BoundingBox): boolean {\n\t\treturn (\n\t\t\tthis.x < (other.x + other.width) &&\n\t\t\tthis.x + this.width > other.x &&\n\t\t\tthis.y < (other.y + other.height) &&\n\t\t\tthis.y + this.height > other.y\n\t\t);\n\t}\n\n\toverride perimeter(): number {\n\t\treturn 2 * (this.width + this.height);\n\t}\n\n\toverride toArray(): [number, number, number, number] {\n\t\treturn [this.x, this.y, this.width, this.height];\n\t}\n}\n", "import { BoundingBox, type BoundingCircle } from \"../mod.ts\";\nimport { Vector2 } from \"../vector2.ts\";\n\nexport class AxisAlignedBoundingBox extends BoundingBox {\n\tconstructor(\n\t\tpublic readonly min = new Vector2(),\n\t\tpublic readonly max = new Vector2(),\n\t) {\n\t\tsuper();\n\t}\n\n\toverride area(): number {\n\t\treturn (this.max.x - this.min.x) * (this.max.y - this.min.y);\n\t}\n\n\toverride centre(other?: AxisAlignedBoundingBox): Vector2 {\n\t\tif (other) {\n\t\t\treturn new Vector2(\n\t\t\t\t((this.min.x + this.max.x) / 2) + ((other.min.x + other.max.x) / 2),\n\t\t\t\t((this.min.y + this.max.y) / 2) + ((other.min.y + other.max.y) / 2),\n\t\t\t);\n\t\t}\n\n\t\treturn new Vector2(\n\t\t\t(this.min.x + this.max.x) / 2,\n\t\t\t(this.min.y + this.max.y) / 2,\n\t\t);\n\t}\n\n\toverride clone(): this {\n\t\treturn new AxisAlignedBoundingBox(\n\t\t\tthis.min.clone(),\n\t\t\tthis.max.clone(),\n\t\t) as this;\n\t}\n\n\toverride combine(other: AxisAlignedBoundingBox): this {\n\t\tconst x = Math.min(this.min.x, other.min.x);\n\t\tconst y = Math.min(this.min.y, other.min.y);\n\t\tconst width = Math.max(this.max.x, other.max.x) - x;\n\t\tconst height = Math.max(this.max.y, other.max.y) - y;\n\n\t\treturn this.fromArray([x, y, width, height]);\n\t}\n\n\toverride contains(other: AxisAlignedBoundingBox): boolean {\n\t\treturn (\n\t\t\tthis.min.x <= other.min.x &&\n\t\t\tthis.min.y <= other.min.y &&\n\t\t\tthis.max.x >= other.max.x &&\n\t\t\tthis.max.y >= other.max.y\n\t\t);\n\t}\n\n\toverride copy(other: AxisAlignedBoundingBox): this {\n\t\tthis.min.copy(other.min);\n\t\tthis.max.copy(other.max);\n\n\t\treturn this;\n\t}\n\n\toverride difference(other: AxisAlignedBoundingBox): this {\n\t\tconst x = Math.max(this.min.x, other.min.x);\n\t\tconst y = Math.max(this.min.y, other.min.y);\n\t\tconst width = Math.min(this.max.x, other.max.x) - x;\n\t\tconst height = Math.min(this.max.y, other.max.y) - y;\n\n\t\treturn this.fromArray([x, y, width, height]);\n\t}\n\n\toverride equals(other: AxisAlignedBoundingBox): boolean {\n\t\treturn (\n\t\t\tthis.min.equals(other.min) &&\n\t\t\tthis.max.equals(other.max)\n\t\t);\n\t}\n\n\toverride intersect(other: AxisAlignedBoundingBox): this {\n\t\tconst x = Math.max(this.min.x, other.min.x);\n\t\tconst y = Math.max(this.min.y, other.min.y);\n\t\tconst width = Math.min(this.max.x, other.max.x) - x;\n\t\tconst height = Math.min(this.max.y, other.max.y) - y;\n\n\t\treturn this.fromArray([x, y, width, height]);\n\t}\n\n\tintersectBox(\n\t\tother: BoundingBox,\n\t): this {\n\t\tconst x = Math.max(this.min.x, other.x);\n\t\tconst y = Math.max(this.min.y, other.y);\n\t\tconst width = Math.min(this.max.x, other.x + other.width) - x;\n\t\tconst height = Math.min(this.max.y, other.y + other.height) - y;\n\n\t\treturn this.fromArray([x, y, width, height]);\n\t}\n\n\tintersectCircle(\n\t\tother: BoundingCircle,\n\t): this {\n\t\tconst x = Math.max(this.min.x, other.x - other.radius);\n\t\tconst y = Math.max(this.min.y, other.y - other.radius);\n\t\tconst width = Math.min(this.max.x, other.x + other.radius) - x;\n\t\tconst height = Math.min(this.max.y, other.y + other.radius) - y;\n\n\t\treturn this.fromArray([x, y, width, height]);\n\t}\n\n\toverride intersects(other: AxisAlignedBoundingBox): boolean {\n\t\treturn !(\n\t\t\tthis.max.x < other.min.x ||\n\t\t\tthis.min.x > other.max.x ||\n\t\t\tthis.max.y < other.min.y ||\n\t\t\tthis.min.y > other.max.y\n\t\t);\n\t}\n\n\tintersectsBox(\n\t\tother: BoundingBox,\n\t): boolean {\n\t\treturn !(\n\t\t\tthis.max.x < other.x ||\n\t\t\tthis.min.x > (other.x + other.width) ||\n\t\t\tthis.max.y < other.y ||\n\t\t\tthis.min.y > (other.y + other.height)\n\t\t);\n\t}\n\n\tintersectsCircle(\n\t\tother: BoundingCircle,\n\t): boolean {\n\t\tconst dx = Math.max(this.min.x - other.x, 0, other.x - this.max.x);\n\t\tconst dy = Math.max(this.min.y - other.y, 0, other.y - this.max.y);\n\n\t\treturn (dx ** 2) + (dy ** 2) <= other.radius ** 2;\n\t}\n\n\tnormal(other?: AxisAlignedBoundingBox): Vector2 {\n\t\tif (other) {\n\t\t\treturn this.centre(other).normal(other.centre(this));\n\t\t}\n\n\t\treturn new Vector2(\n\t\t\tthis.max.y - this.min.y,\n\t\t\tthis.min.x - this.max.x,\n\t\t).normalise();\n\t}\n\n\toverride perimeter(): number {\n\t\treturn 2 * ((this.max.x - this.min.x) + (this.max.y - this.min.y));\n\t}\n\n\toverride toArray(): [number, number, number, number] {\n\t\treturn [this.min.x, this.min.y, this.max.x, this.max.y];\n\t}\n}\n", "import type { AbstractVector } from \"../vector.ts\";\n\nexport abstract class AbstractCaster {\n\tabstract angle(other?: AbstractVector): number;\n\tabstract cast(other?: AbstractVector, scalar?: number): AbstractVector;\n\tabstract centre(other?: AbstractVector): AbstractVector;\n\tabstract intersect(elements: number[]): AbstractVector;\n\tabstract normal(): AbstractVector;\n\tabstract normalise(): this;\n\tabstract toArray(): number[];\n\n\ttoString(): string {\n\t\treturn `${this.constructor.name}(${this.toArray().join(\", \")})`;\n\t}\n}\n", "import { Vector2 } from \"../mod.ts\";\nimport type { BoundingCircle } from \"../volumes/mod.ts\";\nimport { AbstractCaster } from \"./cast.ts\";\nimport type { AABB } from \"./mod.ts\";\n\nexport class Raycaster extends AbstractCaster {\n\tconstructor(public origin = new Vector2(), public direction = new Vector2()) {\n\t\tsuper();\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\t}\n\n\toverride angle(other?: Vector2): number {\n\t\tif (other === undefined) {\n\t\t\treturn Math.atan2(this.direction.y, this.direction.x);\n\t\t}\n\n\t\treturn Math.atan2(other.y - this.origin.y, other.x - this.origin.x);\n\t}\n\n\toverride cast(other?: Vector2, scalar?: number): Vector2 {\n\t\tif (other) {\n\t\t\tthis.direction = new Vector2(\n\t\t\t\tother.x - this.origin.x,\n\t\t\t\tother.y - this.origin.y,\n\t\t\t);\n\t\t}\n\n\t\tif (scalar) {\n\t\t\tthis.direction = this.direction.normalise().scale(scalar);\n\t\t}\n\n\t\treturn new Vector2(\n\t\t\tthis.origin.x + this.direction.x,\n\t\t\tthis.origin.y + this.direction.y,\n\t\t);\n\t}\n\n\toverride centre(other?: Vector2): Vector2 {\n\t\tif (other) {\n\t\t\treturn new Vector2(\n\t\t\t\t(this.origin.x + other.x) / 2,\n\t\t\t\t(this.origin.y + other.y) / 2,\n\t\t\t);\n\t\t}\n\n\t\treturn new Vector2(\n\t\t\tthis.origin.x + (this.direction.x / 2),\n\t\t\tthis.origin.y + (this.direction.y / 2),\n\t\t);\n\t}\n\n\toverride intersect(elements: [number, number, number, number]): Vector2 {\n\t\tconst [x1, y1, x2, y2] = elements;\n\n\t\tconst t1 = (y1 - this.origin.y) / this.direction.y;\n\t\tconst t2 = (y2 - this.origin.y) / this.direction.y;\n\t\tconst t3 = (x1 - this.origin.x) / this.direction.x;\n\t\tconst t4 = (x2 - this.origin.x) / this.direction.x;\n\n\t\tconst tmin = Math.max(\n\t\t\tMath.min(t1, t2),\n\t\t\tMath.min(t3, t4),\n\t\t);\n\t\tconst tmax = Math.min(\n\t\t\tMath.max(t1, t2),\n\t\t\tMath.max(t3, t4),\n\t\t);\n\n\t\tif (tmax < 0 && tmin > tmax) throw new Error(\"intersection not found\");\n\n\t\treturn new Vector2(\n\t\t\tthis.origin.x + (tmin * this.direction.x),\n\t\t\tthis.origin.y + (tmin * this.direction.y),\n\t\t);\n\t}\n\n\tintersectAABB(aabb: AABB): Vector2 {\n\t\tif (this.direction.x === 0 || this.direction.y === 0) {\n\t\t\tthrow new Error(\"direction cannot be zero\");\n\t\t}\n\n\t\tconst t1 = (aabb.min.x - this.origin.x) / this.direction.x;\n\t\tconst t2 = (aabb.max.x - this.origin.x) / this.direction.x;\n\t\tconst t3 = (aabb.min.y - this.origin.y) / this.direction.y;\n\t\tconst t4 = (aabb.max.y - this.origin.y) / this.direction.y;\n\n\t\tconst tmin = Math.max(\n\t\t\tMath.min(t1, t2),\n\t\t\tMath.min(t3, t4),\n\t\t);\n\t\tconst tmax = Math.min(\n\t\t\tMath.max(t1, t2),\n\t\t\tMath.max(t3, t4),\n\t\t);\n\n\t\tif (tmax < 0 && tmin > tmax) throw new Error(\"intersection not found\");\n\n\t\treturn new Vector2(\n\t\t\tthis.origin.x + (tmin * this.direction.x),\n\t\t\tthis.origin.y + (tmin * this.direction.y),\n\t\t);\n\t}\n\n\tintersectCircle(other: BoundingCircle): [Vector2, Vector2] {\n\t\tconst dx = this.origin.x - other.x;\n\t\tconst dy = this.origin.y - other.y;\n\n\t\tconst a = this.direction.dot(this.direction);\n\t\tconst b = 2 * this.direction.dot(new Vector2(dx, dy));\n\t\tconst c = ((dx ** 2) + (dy ** 2)) - (other.radius ** 2);\n\n\t\tconst discriminant = (b ** 2) - (4 * a * c);\n\t\tif (discriminant < 0) return [new Vector2(), new Vector2()];\n\n\t\tconst t1 = (-b + Math.sqrt(discriminant)) / (2 * a);\n\t\tconst t2 = (-b - Math.sqrt(discriminant)) / (2 * a);\n\n\t\treturn [\n\t\t\tnew Vector2(\n\t\t\t\tthis.origin.x + (t1 * this.direction.x),\n\t\t\t\tthis.origin.y + (t1 * this.direction.y),\n\t\t\t),\n\t\t\tnew Vector2(\n\t\t\t\tthis.origin.x + (t2 * this.direction.x),\n\t\t\t\tthis.origin.y + (t2 * this.direction.y),\n\t\t\t),\n\t\t];\n\t}\n\n\tintersectLineSegment(start: Vector2, end: Vector2): Vector2 {\n\t\tconst dx = end.x - start.x;\n\t\tconst dy = end.y - start.y;\n\n\t\tconst t =\n\t\t\t(((this.origin.x - start.x) * dy) - ((this.origin.y - start.y) * dx)) /\n\t\t\t((this.direction.x * dy) - (this.direction.y * dx));\n\t\tif (t < 0 || t > 1) throw new Error(\"intersection not found\");\n\n\t\tconst u = (((this.origin.x - start.x) * this.direction.y) -\n\t\t\t((this.origin.y - start.y) * this.direction.x)) /\n\t\t\t((this.direction.x * dy) - (this.direction.y * dx));\n\t\tif (u < 0 || u > 1) throw new Error(\"intersection not found\");\n\n\t\treturn new Vector2(\n\t\t\tstart.x + (t * dx),\n\t\t\tstart.y + (t * dy),\n\t\t);\n\t}\n\n\toverride normal(): Vector2 {\n\t\treturn new Vector2(this.direction.y, -this.direction.x);\n\t}\n\n\toverride normalise(): this {\n\t\tconst squaredLength = this.direction.lengthSquared();\n\t\tif (squaredLength === 0) {\n\t\t\tthrow new Error(\"cannot normalise zero-length vector\");\n\t\t}\n\n\t\tthis.direction.x /= squaredLength;\n\t\tthis.direction.y /= squaredLength;\n\n\t\treturn this;\n\t}\n\n\toverride toArray(): [number, number, number, number] {\n\t\treturn [\n\t\t\tthis.origin.x,\n\t\t\tthis.origin.y,\n\t\t\tthis.origin.x + this.direction.x,\n\t\t\tthis.origin.y + this.direction.y,\n\t\t];\n\t}\n}\n", "export * from \"./volumes/mod.ts\";\nexport { Matrix2 } from \"./matrix2.ts\";\nexport * from \"./physics/mod.ts\";\nexport * from \"./shapes/mod.ts\";\nexport { Vector2 } from \"./vector2.ts\";\n\nexport const PI_SQUARED = Math.PI * Math.PI;\nexport const PI2 = Math.PI * 2;\nexport const HALF_PI = Math.PI / 2;\nexport const QUARTER_PI = Math.PI / 4;\n\nexport const DEGREES_TO_RADIANS = Math.PI / 180;\nexport const RADIANS_TO_DEGREES = 180 / Math.PI;\n\nexport function toRadians(angle: number): number {\n\treturn angle * DEGREES_TO_RADIANS;\n}\n\nexport function toDegrees(angle: number): number {\n\treturn angle * RADIANS_TO_DEGREES;\n}\n", "import { AABB, PI2, Raycaster, Vector2 } from \"../src/mod.ts\";\n\nconst canvas = document.createElement(\"canvas\");\ncanvas.width = 640;\ncanvas.height = 480;\ndocument.body.appendChild(canvas);\n\nconst ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n\nconst aabb = new AABB(\n\tnew Vector2(canvas.width / 2 - 50, canvas.height / 2 - 50),\n\tnew Vector2(canvas.width / 2 + 50, canvas.height / 2 + 50),\n);\n\nconst ray1 = new Raycaster(aabb.centre(), Vector2.RIGHT);\nconst ray2 = new Raycaster(aabb.centre(), Vector2.LEFT);\n\nfunction update(): void {\n\tray1.origin = aabb.centre().add(new Vector2(100, 0).rotate(ray1.angle()));\n\tray2.origin = aabb.centre().add(new Vector2(100, 0).rotate(ray2.angle()));\n\n\tray1.direction.rotate(-0.03);\n\tray2.direction.rotate(0.01);\n}\n\nfunction render(): void {\n\tctx.clearRect(0, 0, canvas.width, canvas.height);\n\n\tctx.fillStyle = \"black\";\n\tctx.fillRect(0, 0, canvas.width, canvas.height);\n\n\tdrawBox(aabb, \"white\");\n\tdrawPoint(aabb.centre(), \"blue\");\n\n\tdrawRay(ray1, \"yellow\");\n\tdrawRay(ray2, \"yellow\");\n\n\tconst intersection1 = ray1.intersectAABB(aabb);\n\tconst intersection2 = ray2.intersectAABB(aabb);\n\tif (intersection1 && intersection2) {\n\t\tdrawPoints([intersection1, intersection2], \"yellow\");\n\t}\n\n\tdrawIntersection(aabb, ray1, ray2);\n}\n\nfunction loop(): void {\n\tupdate();\n\trender();\n\n\trequestAnimationFrame(loop);\n}\n\nfunction drawIntersection(\n\taabb: AABB,\n\tray1: Raycaster,\n\tray2: Raycaster,\n): void {\n\tconst intersection1 = ray1.intersectAABB(aabb);\n\tconst intersection2 = ray2.intersectAABB(aabb);\n\n\tif (intersection1 && intersection2) {\n\t\tctx.fillStyle = \"rgba(255, 255, 0, 0.5)\";\n\t\tctx.beginPath();\n\t\tctx.moveTo(aabb.centre().x, aabb.centre().y);\n\t\tctx.lineTo(intersection1.x, intersection1.y);\n\t\tctx.lineTo(intersection2.x, intersection2.y);\n\t\tctx.closePath();\n\t\tctx.fill();\n\t}\n}\n\nfunction drawRay(ray: Raycaster, colour: string): void {\n\tctx.strokeStyle = colour;\n\tctx.beginPath();\n\tctx.moveTo(ray.origin.x, ray.origin.y);\n\tctx.lineTo(\n\t\tray.origin.x + ray.direction.x * 1000,\n\t\tray.origin.y + ray.direction.y * 1000,\n\t);\n\tctx.stroke();\n}\n\nfunction drawPoints(points: Vector2[], colour: string): void {\n\tctx.fillStyle = colour;\n\n\tfor (const point of points) {\n\t\tctx.beginPath();\n\t\tctx.arc(point.x, point.y, 5, 0, PI2);\n\t\tctx.fill();\n\t}\n}\n\nfunction drawPoint(point: Vector2, colour: string): void {\n\tctx.fillStyle = colour;\n\tctx.beginPath();\n\tctx.arc(point.x, point.y, 5, 0, PI2);\n\tctx.fill();\n}\n\nfunction drawBox(box: AABB, colour: string): void {\n\tctx.strokeStyle = colour;\n\tctx.strokeRect(\n\t\tbox.min.x,\n\t\tbox.min.y,\n\t\tbox.max.x - box.min.x,\n\t\tbox.max.y - box.min.y,\n\t);\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function (): void {\n\tloop();\n});\n"],
  "mappings": "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",
  "names": ["AbstractVector", "Vector2", "_Vector2", "AbstractVector", "x", "y", "other", "scalar", "min", "max", "angle", "elements", "alpha", "length", "normal", "cos", "sin", "centre", "out", "v", "AbstractBoundingVolume", "BoundingBox", "_BoundingBox", "AbstractBoundingVolume", "x", "y", "width", "height", "other", "Vector2", "elements", "x0", "y0", "x1", "y1", "AxisAlignedBoundingBox", "_AxisAlignedBoundingBox", "BoundingBox", "min", "Vector2", "max", "other", "x", "y", "width", "height", "dx", "dy", "AbstractCaster", "Raycaster", "AbstractCaster", "origin", "Vector2", "direction", "other", "scalar", "elements", "x1", "y1", "x2", "y2", "t1", "t2", "t3", "t4", "tmin", "tmax", "aabb", "dx", "dy", "a", "b", "discriminant", "start", "end", "t", "u", "squaredLength", "PI_SQUARED", "PI2", "HALF_PI", "QUARTER_PI", "DEGREES_TO_RADIANS", "RADIANS_TO_DEGREES", "canvas", "ctx", "aabb", "AxisAlignedBoundingBox", "Vector2", "ray1", "Raycaster", "ray2", "update", "render", "drawBox", "drawPoint", "drawRay", "intersection1", "intersection2", "drawPoints", "drawIntersection", "loop", "ray", "colour", "points", "point", "PI2", "box"]
}
Editor is loading...
Leave a Comment