/**
 * @typedef BaseEffectSourceOptions
 * @property {PlaceableObject} [object] An optional PlaceableObject which is responsible for this source
 * @property {string} [sourceId]        A unique ID for this source. This will be set automatically if an
 *                                      object is provided, otherwise is required.
 */

/**
 * @typedef BaseEffectSourceData
 * @property {number} x                   The x-coordinate of the source location
 * @property {number} y                   The y-coordinate of the source location
 * @property {number} elevation           The elevation of the point source
 * @property {string} level               The ID of the Level the point source is in
 * @property {boolean} disabled           Whether or not the source is disabled
 */

/**
 * @typedef _RenderedEffectSourceData
 * {@ignore}
 * @property {object} animation           An animation configuration for the source
 * @property {number|null} color          A color applied to the rendered effect
 * @property {number|null} seed           An integer seed to synchronize (or de-synchronize) animations
 * @property {boolean} preview            Is this source a temporary preview?
 */

/**
 * @typedef {BaseEffectSourceData & _RenderedEffectSourceData} RenderedEffectSourceData
 * {@interface}
 */

/**
 * @typedef RenderedEffectSourceAnimationConfig
 * @property {string} [label]                                   The human-readable (localized) label for the animation
 * @property {Function} [animation]                             The animation function that runs every frame
 * @property {AdaptiveIlluminationShader} [illuminationShader]  A custom illumination shader used by this animation
 * @property {AdaptiveColorationShader} [colorationShader]      A custom coloration shader used by this animation
 * @property {AdaptiveBackgroundShader} [backgroundShader]      A custom background shader used by this animation
 * @property {AdaptiveDarknessShader} [darknessShader]          A custom darkness shader used by this animation
 * @property {number} [seed]                                    The animation seed
 * @property {number} [time]                                    The animation time
 */

/**
 * @typedef RenderedEffectLayerConfig
 * @property {typeof AdaptiveLightingShader} defaultShader      The default shader used by this layer
 * @property {PIXI.BLEND_MODES} blendMode                       The blend mode used by this layer
 */

/**
 * @typedef RenderedEffectSourceLayer
 * @property {boolean} active             Is this layer actively rendered?
 * @property {boolean} reset              Do uniforms need to be reset?
 * @property {boolean} suppressed         Is this layer temporarily suppressed?
 * @property {PointSourceMesh} mesh       The rendered mesh for this layer
 * @property {AdaptiveLightingShader} shader  The shader instance used for the layer
 */

/**
 * @typedef _VisionSourceData
 * {@ignore}
 * @property {number} contrast            The amount of contrast
 * @property {number} attenuation         Strength of the attenuation between bright, dim, and dark
 * @property {number} saturation          The amount of color saturation
 * @property {number} brightness          The vision brightness.
 * @property {string} visionMode          The vision mode.
 * @property {number} lightRadius         The range of light perception.
 * @property {boolean} blinded            Is this vision source blinded?
 */

/**
 * @typedef {RenderedEffectSourceData & _VisionSourceData} VisionSourceData
 * {@interface}
 */
