{"version":3,"file":"Utils.mjs","sources":["../../src/core/Utils.ts"],"sourcesContent":["import type { ISkeleton } from './ISkeleton';\n\n/**\n * @public\n */\n\nexport interface Map<T> {\n    [key: string]: T;\n}\n\n/**\n * @public\n */\nexport interface StringMap<T> {\n    [key: string]: T;\n}\n\n/**\n * @public\n */\nexport class IntSet {\n    array = new Array<number>();\n\n    add(value: number): boolean {\n        const contains = this.contains(value);\n\n        this.array[value | 0] = value | 0;\n\n        return !contains;\n    }\n\n    contains(value: number) {\n        return this.array[value | 0] != undefined;\n    }\n\n    remove(value: number) {\n        this.array[value | 0] = undefined;\n    }\n\n    clear() {\n        this.array.length = 0;\n    }\n}\n\n/**\n * @public\n */\nexport class StringSet {\n    entries: StringMap<boolean> = {};\n    size = 0;\n\n    add(value: string): boolean {\n        const contains = this.entries[value];\n\n        this.entries[value] = true;\n        if (!contains) {\n            this.size++;\n\n            return true;\n        }\n\n        return false;\n    }\n\n    addAll(values: string[]): boolean {\n        const oldSize = this.size;\n\n        for (let i = 0, n = values.length; i < n; i++) {\n            this.add(values[i]);\n        }\n\n        return oldSize != this.size;\n    }\n\n    contains(value: string) {\n        return this.entries[value];\n    }\n\n    clear() {\n        this.entries = {};\n        this.size = 0;\n    }\n}\n\n/**\n * @public\n */\nexport interface NumberArrayLike {\n    readonly length: number;\n    [n: number]: number;\n}\n\n/**\n * @public\n */\nexport interface Disposable {\n    dispose(): void;\n}\n\n/**\n * @public\n */\nexport interface Restorable {\n    restore(): void;\n}\n\n/**\n * @public\n */\nexport class Color {\n    public static WHITE = new Color(1, 1, 1, 1);\n    public static RED = new Color(1, 0, 0, 1);\n    public static GREEN = new Color(0, 1, 0, 1);\n    public static BLUE = new Color(0, 0, 1, 1);\n    public static MAGENTA = new Color(1, 0, 1, 1);\n\n    constructor(public r: number = 0, public g: number = 0, public b: number = 0, public a: number = 0) {}\n\n    set(r: number, g: number, b: number, a: number) {\n        this.r = r;\n        this.g = g;\n        this.b = b;\n        this.a = a;\n\n        return this.clamp();\n    }\n\n    setFromColor(c: Color) {\n        this.r = c.r;\n        this.g = c.g;\n        this.b = c.b;\n        this.a = c.a;\n\n        return this;\n    }\n\n    setFromString(hex: string) {\n        hex = hex.charAt(0) == '#' ? hex.substr(1) : hex;\n        this.r = parseInt(hex.substr(0, 2), 16) / 255;\n        this.g = parseInt(hex.substr(2, 2), 16) / 255;\n        this.b = parseInt(hex.substr(4, 2), 16) / 255;\n        this.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255;\n\n        return this;\n    }\n\n    add(r: number, g: number, b: number, a: number) {\n        this.r += r;\n        this.g += g;\n        this.b += b;\n        this.a += a;\n\n        return this.clamp();\n    }\n\n    clamp() {\n        if (this.r < 0) this.r = 0;\n        else if (this.r > 1) this.r = 1;\n\n        if (this.g < 0) this.g = 0;\n        else if (this.g > 1) this.g = 1;\n\n        if (this.b < 0) this.b = 0;\n        else if (this.b > 1) this.b = 1;\n\n        if (this.a < 0) this.a = 0;\n        else if (this.a > 1) this.a = 1;\n\n        return this;\n    }\n\n    static rgba8888ToColor(color: Color, value: number) {\n        color.r = ((value & 0xff000000) >>> 24) / 255;\n        color.g = ((value & 0x00ff0000) >>> 16) / 255;\n        color.b = ((value & 0x0000ff00) >>> 8) / 255;\n        color.a = (value & 0x000000ff) / 255;\n    }\n\n    static rgb888ToColor(color: Color, value: number) {\n        color.r = ((value & 0x00ff0000) >>> 16) / 255;\n        color.g = ((value & 0x0000ff00) >>> 8) / 255;\n        color.b = (value & 0x000000ff) / 255;\n    }\n\n    static fromString(hex: string): Color {\n        return new Color().setFromString(hex);\n    }\n}\n\n/**\n * @public\n */\nexport class MathUtils {\n    static PI = 3.1415927;\n    static PI2 = MathUtils.PI * 2;\n    static radiansToDegrees = 180 / MathUtils.PI;\n    static radDeg = MathUtils.radiansToDegrees;\n    static degreesToRadians = MathUtils.PI / 180;\n    static degRad = MathUtils.degreesToRadians;\n\n    static clamp(value: number, min: number, max: number) {\n        if (value < min) return min;\n        if (value > max) return max;\n\n        return value;\n    }\n\n    static cosDeg(degrees: number) {\n        return Math.cos(degrees * MathUtils.degRad);\n    }\n\n    static sinDeg(degrees: number) {\n        return Math.sin(degrees * MathUtils.degRad);\n    }\n\n    static signum(value: number): number {\n        return Math.sign(value);\n    }\n\n    static toInt(x: number) {\n        return x > 0 ? Math.floor(x) : Math.ceil(x);\n    }\n\n    static cbrt(x: number) {\n        const y = Math.pow(Math.abs(x), 1 / 3);\n\n        return x < 0 ? -y : y;\n    }\n\n    static randomTriangular(min: number, max: number): number {\n        return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n    }\n\n    static randomTriangularWith(min: number, max: number, mode: number): number {\n        const u = Math.random();\n        const d = max - min;\n\n        if (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min));\n\n        return max - Math.sqrt((1 - u) * d * (max - mode));\n    }\n\n    static isPowerOfTwo(value: number) {\n        return value && (value & (value - 1)) === 0;\n    }\n}\n\n/**\n * @public\n */\nexport abstract class Interpolation {\n    protected abstract applyInternal(a: number): number;\n    apply(start: number, end: number, a: number): number {\n        return start + (end - start) * this.applyInternal(a);\n    }\n}\n\n/**\n * @public\n */\nexport class Pow extends Interpolation {\n    protected power = 2;\n\n    constructor(power: number) {\n        super();\n        this.power = power;\n    }\n\n    applyInternal(a: number): number {\n        if (a <= 0.5) return Math.pow(a * 2, this.power) / 2;\n\n        return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n    }\n}\n\n/**\n * @public\n */\nexport class PowOut extends Pow {\n    applyInternal(a: number): number {\n        return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n    }\n}\n\n/**\n * @public\n */\nexport class Utils {\n    static SUPPORTS_TYPED_ARRAYS = typeof Float32Array !== 'undefined';\n\n    static arrayCopy<T>(source: ArrayLike<T>, sourceStart: number, dest: ArrayLike<T>, destStart: number, numElements: number) {\n        for (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n            dest[j] = source[i];\n        }\n    }\n\n    static arrayFill<T>(array: ArrayLike<T>, fromIndex: number, toIndex: number, value: T) {\n        for (let i = fromIndex; i < toIndex; i++) {\n            array[i] = value;\n        }\n    }\n\n    static setArraySize<T>(array: Array<T>, size: number, value: any = 0): Array<T> {\n        const oldSize = array.length;\n\n        if (oldSize == size) return array;\n        array.length = size;\n        if (oldSize < size) {\n            for (let i = oldSize; i < size; i++) array[i] = value;\n        }\n\n        return array;\n    }\n\n    static ensureArrayCapacity<T>(array: Array<T>, size: number, value: any = 0): Array<T> {\n        if (array.length >= size) return array;\n\n        return Utils.setArraySize(array, size, value);\n    }\n\n    static newArray<T>(size: number, defaultValue: T): Array<T> {\n        const array = new Array<T>(size);\n\n        for (let i = 0; i < size; i++) array[i] = defaultValue;\n\n        return array;\n    }\n\n    static newFloatArray(size: number): NumberArrayLike {\n        if (Utils.SUPPORTS_TYPED_ARRAYS) {\n            return new Float32Array(size);\n        }\n\n        const array = new Array<number>(size);\n\n        for (let i = 0; i < array.length; i++) array[i] = 0;\n\n        return array;\n    }\n\n    static newShortArray(size: number): NumberArrayLike {\n        if (Utils.SUPPORTS_TYPED_ARRAYS) {\n            return new Int16Array(size);\n        }\n\n        const array = new Array<number>(size);\n\n        for (let i = 0; i < array.length; i++) array[i] = 0;\n\n        return array;\n    }\n\n    static toFloatArray(array: Array<number>) {\n        return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n    }\n\n    static toSinglePrecision(value: number) {\n        return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n    }\n\n    // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n    static webkit602BugfixHelper(alpha: number, blend: any) {}\n\n    static contains<T>(array: Array<T>, element: T, identity = true) {\n        for (let i = 0; i < array.length; i++) {\n            if (array[i] == element) return true;\n        }\n\n        return false;\n    }\n\n    static enumValue(type: any, name: string) {\n        return type[name[0].toUpperCase() + name.slice(1)];\n    }\n}\n\n/**\n * @public\n */\nexport class DebugUtils {\n    static logBones(skeleton: ISkeleton) {\n        for (let i = 0; i < skeleton.bones.length; i++) {\n            const bone = skeleton.bones[i];\n            const mat = bone.matrix;\n\n            console.log(`${bone.data.name}, ${mat.a}, ${mat.b}, ${mat.c}, ${mat.d}, ${mat.tx}, ${mat.ty}`);\n        }\n    }\n}\n\n/**\n * @public\n */\nexport class Pool<T> {\n    private items = new Array<T>();\n    private instantiator: () => T;\n\n    constructor(instantiator: () => T) {\n        this.instantiator = instantiator;\n    }\n\n    obtain() {\n        return this.items.length > 0 ? this.items.pop() : this.instantiator();\n    }\n\n    free(item: T) {\n        if ((item as any).reset) (item as any).reset();\n        this.items.push(item);\n    }\n\n    freeAll(items: ArrayLike<T>) {\n        for (let i = 0; i < items.length; i++) {\n            this.free(items[i]);\n        }\n    }\n\n    clear() {\n        this.items.length = 0;\n    }\n}\n\n/**\n * @public\n */\nexport class Vector2 {\n    constructor(public x = 0, public y = 0) {}\n\n    set(x: number, y: number): Vector2 {\n        this.x = x;\n        this.y = y;\n\n        return this;\n    }\n\n    length() {\n        const x = this.x;\n        const y = this.y;\n\n        return Math.sqrt(x * x + y * y);\n    }\n\n    normalize() {\n        const len = this.length();\n\n        if (len != 0) {\n            this.x /= len;\n            this.y /= len;\n        }\n\n        return this;\n    }\n}\n\n/**\n * @public\n */\nexport class TimeKeeper {\n    maxDelta = 0.064;\n    framesPerSecond = 0;\n    delta = 0;\n    totalTime = 0;\n\n    private lastTime = Date.now() / 1000;\n    private frameCount = 0;\n    private frameTime = 0;\n\n    update() {\n        const now = Date.now() / 1000;\n\n        this.delta = now - this.lastTime;\n        this.frameTime += this.delta;\n        this.totalTime += this.delta;\n        if (this.delta > this.maxDelta) this.delta = this.maxDelta;\n        this.lastTime = now;\n\n        this.frameCount++;\n        if (this.frameTime > 1) {\n            this.framesPerSecond = this.frameCount / this.frameTime;\n            this.frameTime = 0;\n            this.frameCount = 0;\n        }\n    }\n}\n\n/**\n * @public\n */\nexport interface ArrayLike<T> {\n    length: number;\n    [n: number]: T;\n}\n\n/**\n * @public\n */\nexport class WindowedMean {\n    values: Array<number>;\n    addedValues = 0;\n    lastValue = 0;\n    mean = 0;\n    dirty = true;\n\n    constructor(windowSize = 32) {\n        this.values = new Array<number>(windowSize);\n    }\n\n    hasEnoughData() {\n        return this.addedValues >= this.values.length;\n    }\n\n    addValue(value: number) {\n        if (this.addedValues < this.values.length) this.addedValues++;\n        this.values[this.lastValue++] = value;\n        if (this.lastValue > this.values.length - 1) this.lastValue = 0;\n        this.dirty = true;\n    }\n\n    getMean() {\n        if (this.hasEnoughData()) {\n            if (this.dirty) {\n                let mean = 0;\n\n                for (let i = 0; i < this.values.length; i++) {\n                    mean += this.values[i];\n                }\n                this.mean = mean / this.values.length;\n                this.dirty = false;\n            }\n\n            return this.mean;\n        }\n\n        return 0;\n    }\n}\n"],"names":[],"mappings":"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"}