import { ContextGLVertexBufferFormat } from '@awayjs/stage';

import { ShaderBase, _Render_RenderableBase, AnimationRegisterData } from '@awayjs/renderer';

import { AnimationElements } from '../data/AnimationElements';
import { ParticleTimeNode } from '../nodes/ParticleTimeNode';

import { ParticleAnimator } from '../ParticleAnimator';

import { ParticleStateBase } from './ParticleStateBase';

/**
 * ...
 */
export class ParticleTimeState extends ParticleStateBase {
	/** @private */
	public static TIME_STREAM_INDEX: number = 0;

	/** @private */
	public static TIME_CONSTANT_INDEX: number = 1;

	private _particleTimeNode: ParticleTimeNode;

	constructor(animator: ParticleAnimator, particleTimeNode: ParticleTimeNode) {
		super(animator, particleTimeNode, true);

		this._particleTimeNode = particleTimeNode;
	}

	public setRenderState(shader: ShaderBase, renderable: _Render_RenderableBase, animationElements: AnimationElements, animationRegisterData: AnimationRegisterData): void {
		animationElements.activateVertexBuffer(animationRegisterData.getRegisterIndex(this._pAnimationNode, ParticleTimeState.TIME_STREAM_INDEX), this._particleTimeNode._iDataOffset, shader.stage, ContextGLVertexBufferFormat.FLOAT_4);

		const particleTime: number = this._pTime / 1000;
		shader.setVertexConst(animationRegisterData.getRegisterIndex(this._pAnimationNode, ParticleTimeState.TIME_CONSTANT_INDEX), particleTime, particleTime, particleTime, particleTime);
	}

}