export class LightHandler{ static isLightVisibleWrapper(wrapped, ...args){ const result = wrapped(...args); const isPreview = this.document?.id == null; if(isPreview) return result; if(!CONFIG.Levels.handlers.UIHandler.emitsLightUI(this)) return false; if (game.Levels3DPreview?._active) return result; const isToken = this instanceof Token; const rangeBottom = isToken ? this.document.elevation : this.document.flags.levels?.rangeBottom ?? -Infinity; const rangeTop = isToken ? this.losHeight : this.document.flags.levels?.rangeTop ?? Infinity; const currentElevation = CONFIG.Levels.currentToken?.losHeight if(currentElevation === undefined) return result; const underBackground = currentElevation >= canvas.primary.background.elevation && rangeTop < canvas.primary.background.elevation; if(underBackground) return false; let isLightVisible = false; if ((canvas.scene.flags.levels?.lightMasking ?? true)) { if (isToken) isLightVisible = true;//this.visible || rangeBottom <= currentElevation; else isLightVisible = rangeBottom <= currentElevation; } else { let inTokenElevationRange = false; if (isToken) { const currentTokenElevation = CONFIG.Levels.currentToken?.document?.elevation ?? currentElevation; inTokenElevationRange = rangeBottom <= currentTokenElevation && currentTokenElevation <= rangeTop; } isLightVisible = (rangeBottom <= currentElevation && currentElevation <= rangeTop) || inTokenElevationRange; } return result && isLightVisible; } }