{"version":3,"sources":["../../src/fromvector/fromVector.ts"],"sourcesContent":["export interface VectorObject {\n    isVectorObject: boolean;\n    x: number,\n    y: number,\n    z: number,\n    // Maths\n    add: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    limit: (max: number) => VectorObject,\n    div: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    mult: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    heading: () => number,\n    sub: (x: VectorObject | number[] | number, y?: number, z?: number) => VectorObject,\n    setMag: (n: number) => VectorObject,\n    magSq: () => number,\n    mag: () => number,\n    normalize: () => VectorObject,\n    copy: () => VectorObject,\n    dist: (x: VectorObject | number, y?: number) => number,\n    // exports\n    toVector2: () => number[]\n    toVector3: () => number[]\n}\n/**\n * Structure and logic are based on p5js.\n */\nexport const createVector = (x: number, y: number, z: number = 0) => {\n    const vectorObject: VectorObject = {\n        isVectorObject: true,\n        x, y, z,\n        /**\n         * @param x { VectorObject | Number[] | number }\n         * @returns \n         */\n        add(x: any, y: number = 0, z: number = 0) {\n            if (x instanceof Array) {\n                this.x += x[0] || 0;\n                this.y += x[1] || 0;\n                this.z += x[2] || 0;\n                return this;\n            }\n            if (x.isVectorObject) {\n                this.x += x.x || 0;\n                this.y += x.y || 0;\n                this.z += x.z || 0;\n                return this;\n            }\n            this.x += x || 0;\n            this.y += y || 0;\n            this.z += z || 0;\n            return this;\n        },\n        limit(max: number) {\n            const mSq = this.magSq();\n            if (mSq > max * max) {\n                this.div(Math.sqrt(mSq)) //normalize it\n                    .mult(max);\n            }\n            return this;\n        },\n        /**\n         * \n         * @param x { VectorObject | Number[] | number }\n         * @param y { number }\n         * @param z { number }\n         * @returns \n         */\n        div(x: any, y: number = 0, z: number = 0) {\n            if (x.isVectorObject) {\n                if (\n                    Number.isFinite(x.x) &&\n                    Number.isFinite(x.y) &&\n                    Number.isFinite(x.z) &&\n                    typeof x.x === 'number' &&\n                    typeof x.y === 'number' &&\n                    typeof x.z === 'number'\n                ) {\n                    this.x /= x.x;\n                    this.y /= x.y;\n                    this.z /= x.z;\n                }\n                return this;\n            }\n            if (x instanceof Array) {\n                if (\n                    x.every(element => Number.isFinite(element)) &&\n                    x.every(element => typeof element === 'number')\n                ) {\n                    if (x.some(element => element === 0)) {\n                        console.warn('Divide by 0');\n                        return this;\n                    }\n\n                    if (x.length === 1) {\n                        this.x /= x[0];\n                        this.y /= x[0];\n                        this.z /= x[0];\n                    } else if (x.length === 2) {\n                        this.x /= x[0];\n                        this.y /= x[1];\n                    } else if (x.length === 3) {\n                        this.x /= x[0];\n                        this.y /= x[1];\n                        this.z /= x[2];\n                    }\n                } else {\n                    console.warn(\n                        'x contains components that are either undefined or not finite numbers'\n                    );\n                }\n\n                return this;\n            }\n\n            const vectorComponents = [...arguments];\n            if (\n                vectorComponents.every(element => Number.isFinite(element)) &&\n                vectorComponents.every(element => typeof element === 'number')\n            ) {\n                if (vectorComponents.some(element => element === 0)) {\n                    console.warn('Divide by 0');\n                    return this;\n                }\n\n                if (arguments.length === 1) {\n                    this.x /= x;\n                    this.y /= x;\n                    this.z /= x;\n                }\n                if (arguments.length === 2) {\n                    this.x /= x;\n                    this.y /= y;\n                }\n                if (arguments.length === 3) {\n                    this.x /= x;\n                    this.y /= y;\n                    this.z /= z;\n                }\n            } else {\n                console.warn(\n                    'x, y, or z arguments are either undefined or not a finite number'\n                );\n            }\n\n            return this;\n        },\n        /**\n        * \n        * @param x { VectorObject | Number[] | number }\n        * @param y { number }\n        * @param z { number }\n        * @returns \n        */\n        mult(x: any, y: number = 0, z: number = 0) {\n            if (x.isVectorObject) {\n                // new p5.Vector will check that values are valid upon construction but it's possible\n                // that someone could change the value of a component after creation, which is why we still\n                // perform this check\n                if (\n                    Number.isFinite(x.x) &&\n                    Number.isFinite(x.y) &&\n                    Number.isFinite(x.z) &&\n                    typeof x.x === 'number' &&\n                    typeof x.y === 'number' &&\n                    typeof x.z === 'number'\n                ) {\n                    this.x *= x.x;\n                    this.y *= x.y;\n                    this.z *= x.z;\n                } else {\n                    console.warn(\n                        'x contains components that are either undefined or not finite numbers'\n                    );\n                }\n                return this;\n            }\n            if (x instanceof Array) {\n                if (\n                    x.every(element => Number.isFinite(element)) &&\n                    x.every(element => typeof element === 'number')\n                ) {\n                    if (x.length === 1) {\n                        this.x *= x[0];\n                        this.y *= x[0];\n                        this.z *= x[0];\n                    } else if (x.length === 2) {\n                        this.x *= x[0];\n                        this.y *= x[1];\n                    } else if (x.length === 3) {\n                        this.x *= x[0];\n                        this.y *= x[1];\n                        this.z *= x[2];\n                    }\n                } else {\n                    console.warn(\n                        'x contains elements that are either undefined or not finite numbers'\n                    );\n                }\n                return this;\n            }\n\n            const vectorComponents = [...arguments];\n            if (\n                vectorComponents.every(element => Number.isFinite(element)) &&\n                vectorComponents.every(element => typeof element === 'number')\n            ) {\n                if (arguments.length === 1) {\n                    this.x *= x;\n                    this.y *= x;\n                    this.z *= x;\n                }\n                if (arguments.length === 2) {\n                    this.x *= x;\n                    this.y *= y;\n                }\n                if (arguments.length === 3) {\n                    this.x *= x;\n                    this.y *= y;\n                    this.z *= z;\n                }\n            } else {\n                console.warn(\n                    'x, y, or z arguments are either undefined or not a finite number'\n                );\n            }\n\n            return this;\n        },\n        heading() {\n            const h = Math.atan2(this.y, this.x);\n            return h;\n        },\n        /*\n        * @method sub\n        * @param  {VectorObject | Number[]} value the vector to subtract\n        * @chainable\n        */\n        sub(x: any, y: number = 0, z: number = 0) {\n            if (x.isVectorObject) {\n                this.x -= x.x || 0;\n                this.y -= x.y || 0;\n                this.z -= x.z || 0;\n                return this;\n            }\n            if (x instanceof Array) {\n                this.x -= x[0] || 0;\n                this.y -= x[1] || 0;\n                this.z -= x[2] || 0;\n                return this;\n            }\n            this.x -= x || 0;\n            this.y -= y || 0;\n            this.z -= z || 0;\n            return this;\n        },\n        setMag(n) {\n            return this.normalize().mult(n);\n        },\n        magSq() {\n            const x = this.x;\n            const y = this.y;\n            const z = this.z;\n            return x * x + y * y + z * z;\n        },\n        mag() {\n            return Math.sqrt(this.magSq());\n        },\n        normalize() {\n            const len = this.mag();\n            // here we multiply by the reciprocal instead of calling 'div()'\n            // since div duplicates this zero check.\n            if (len !== 0) this.mult(1 / len);\n            return this;\n        },\n        copy() {\n            return createVector(this.x, this.y, this.z);\n        },\n        dist(x: any, y: number = 0) {\n            if (x.isVectorObject) {\n                return Math.hypot(x.x - this.x, x.y - this.y); \n            }\n            return Math.hypot(x - this.x, y - this.y); \n        },\n        toVector2(){ return [this.x, this.y] },\n        toVector3(){ return [this.x, this.y, this.z] },\n    }\n    return vectorObject;\n}\n\nexport const FromVector = { create: createVector }\n"],"mappings":"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","names":["x","y","z"]}