import { Effect } from "./Effect";

/**
 * 雨效果类,用于创建和管理雨效果。
 * @class RainEffect
 * @extends THING.Effect
 * @memberof THING
 * @example
 * // 创建雨效果
 * const rainEffect = new THING.RainEffect();
 *
 * // 添加效果到相机
 * app.camera.addEffect('rain', rainEffect);
 *
 * // 配置雨效果属性
 * rainEffect.speed = 1.0;          // 设置雨下落速度
 * rainEffect.size = 0.6;           // 设置雨滴大小
 * rainEffect.angle = 10;           // 设置下落角度
 * rainEffect.density = 1.0;        // 设置雨密度
 * rainEffect.strength = 1.0;       // 设置效果强度
 * rainEffect.coverStrength = 0.2;  // 设置地面雨水覆盖强度
 * rainEffect.coverDensity = 0.75;  // 设置地面雨水覆盖密度
 * rainEffect.coverSize = 5.0;      // 设置地面雨水覆盖大小
 * rainEffect.coverSpeed = 1.0;     // 设置地面雨水流动速度
 *
 * // 设置地面雨水纹理
 * rainEffect.coverTexture = new THING.ImageTexture('./images/RippleTex.png');
 *
 * // 移除效果
 * app.camera.removeEffect('rain');
 * @public
 */
class RainEffect extends Effect {

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

		this.createResourceNode('RainEffect');
	}

	// #region Accessor

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

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

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

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

	/**
	 * 获取/设置雨角度。
	 * @type {number}
	 * @default 10
	 * @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 0.2
	 * @public
	 */
	get coverStrength() {
		return this.resource.getCoverStrength();
	}

	set coverStrength(value) {
		this.resource.setCoverStrength(value);
	}


	/**
	 * 获取/设置雨覆盖密度。
	 * @type {number}
	 * @default 0.75
	 * @public
	 */
	get coverDensity() {
		return this.resource.getCoverDensity();
	}

	set coverDensity(value) {
		this.resource.setCoverDensity(value);
	}

	/**
	 * 获取/设置雨覆盖大小。
	 * @type {number}
	 * @default 5.0
	 * @public
	 */
	get coverSize() {
		return this.resource.getCoverSize();
	}

	set coverSize(value) {
		this.resource.setCoverSize(value);
	}


	/**
	 * 获取/设置雨覆盖速度。
	 * @type {number}
	 * @default 1.0
	 * @public
	 */
	get coverSpeed() {
		return this.resource.getCoverSpeed();
	}

	set coverSpeed(value) {
		this.resource.setCoverSpeed(value);
	}

	/**
	 * 设置雨覆盖纹理。
	 * @type {ImageTextureResource}
	 * @default null
	 * @public
	 */
	set coverTexture(imageTexture) {
		this.resource.setCoverTexture(imageTexture.getTextureResource());
	}
	// #endregion

}
export { RainEffect }