import { Layers, Object3D } from "three"


const $customVisibilityFlag = Symbol("customVisibilityFlag");

/**
 * Sets the visibility of a single object without affecting the visibility of the child hierarchy
 */
export function setCustomVisibility(obj: Object3D, visible: boolean) {
    obj.layers[$customVisibilityFlag] = visible;
}

const $didPatch = Symbol("DidPatchLayers");
export function patchLayers() {
    const prot = Layers.prototype;
    if (prot[$didPatch]) return;
    prot[$didPatch] = true;
    const origTest = prot.test;
    prot.test = function (layer: Layers): boolean {
        if(this[$customVisibilityFlag] === false) return false;
        return origTest.call(this, layer);
    };
}