import { Effect } from "./Effect";

/**
 * 雪花效果类,用于创建和管理雪花效果。
 * @class SnowEffect
 * @extends Effect
 * @memberof THING
 * @example
 * // 创建雪花效果
 * const snowEffect = new THING.SnowEffect();
 *
 * // 添加效果到相机
 * app.camera.addEffect('snow', snowEffect);
 *
 * // 配置雪花效果属性
 * snowEffect.speed = 1.0;     // 设置雪花下落速度
 * snowEffect.size = 1.5;      // 设置雪花大小
 * snowEffect.angle = 0;       // 设置下落角度
 * snowEffect.density = 1.0;   // 设置雪花密度
 * snowEffect.strength = 1.0;  // 设置效果强度
 * snowEffect.cover = 1.0;     // 设置覆盖率
 * snowEffect.color = [1, 1, 1];  // 设置雪花颜色(RGB数组)
 * snowEffect.fxaa = false;    // 启用/禁用FXAA
 *
 * // 移除效果
 * app.camera.removeEffect('snow');
 * @public
 */
class SnowEffect extends Effect {

	/**
	 * @constructor
	 * @public
	 */
	constructor(params) {
		super(params);

		this.createResourceNode('SnowEffect');
	}

	/**
	 * 获取/设置雪花速度。
	 * @type {number}
	 * @default 1.0
	 * @public
	 */
	get speed() {
		return this.resource.getSpeed();
	}

	set speed(value) {
		this.resource.setSpeed(value);
	}

	/**
	 * 获取/设置雪花大小。
	 * @type {number}
	 * @default 1.5
	 * @public
	 */
	get size() {
		return this.resource.getSize();
	}

	set size(value) {
		this.resource.setSize(value);
	}


	/**
	 * 获取/设置雪花角度。
	 * @type {number}
	 * @default 0.0
	 * @public
	 */
	get angle() {
		return this.resource.getAngle();
	}

	set angle(value) {
		this.resource.setAngle(value);
	}

	/**
	 * 获取/设置雪花密度。
	 * @type {number}
	 * @default 1.0
	 * @public
	 */
	get density() {
		return this.resource.getDensity();
	}

	set density(value) {
		this.resource.setDensity(value);
	}

	/**
	 * 获取/设置雪花强度。
	 * @type {number}
	 * @default 1.0
	 * @public
	 */
	get strength() {
		return this.resource.getStrength();
	}

	set strength(value) {
		this.resource.setStrength(value);
	}


	/**
	 * 获取/设置覆盖率。
	 * @type {number}
	 * @default 1.0
	 * @public
	 */
	get cover() {
		return this.resource.getCover();
	}

	set cover(value) {
		this.resource.setCover(value);
	}

	/**
	 * 获取/设置颜色。
	 * @type {Array<number>}
	 * @default - [1.0, 1.0, 1.0]
	 * @public
	 */
	get color() {
		return this.resource.getColor();
	}

	set color(value) {
		this.resource.setColor(value);
	}

	/**
	 * 获取/设置FXAA。
	 * @type {boolean}
	 * @default false
	 * @public
	 */
	get fxaa() {
		return this.resource.getFxaa();
	}

	set fxaa(value) {
		this.resource.setFxaa(value);
	}

}

export { SnowEffect }