@awayjs/graphics
Version:
AwayJS graphics classes
71 lines (55 loc) • 2.69 kB
text/typescript
import { Vector3D } from '@awayjs/core';
import { ContextGLVertexBufferFormat } from '@awayjs/stage';
import { ShaderBase, _Render_RenderableBase, AnimationRegisterData } from '@awayjs/renderer';
import { AnimationElements } from '../data/AnimationElements';
import { ParticlePropertiesMode } from '../data/ParticlePropertiesMode';
import { ParticleBezierCurveNode } from '../nodes/ParticleBezierCurveNode';
import { ParticleAnimator } from '../ParticleAnimator';
import { ParticleStateBase } from './ParticleStateBase';
/**
* ...
*/
export class ParticleBezierCurveState extends ParticleStateBase {
/** @private */
public static BEZIER_CONTROL_INDEX: number = 0;
/** @private */
public static BEZIER_END_INDEX: number = 1;
private _particleBezierCurveNode: ParticleBezierCurveNode;
private _controlPoint: Vector3D;
private _endPoint: Vector3D;
/**
* Defines the default control point of the node, used when in global mode.
*/
public get controlPoint(): Vector3D {
return this._controlPoint;
}
public set controlPoint(value: Vector3D) {
this._controlPoint = value;
}
/**
* Defines the default end point of the node, used when in global mode.
*/
public get endPoint(): Vector3D {
return this._endPoint;
}
public set endPoint(value: Vector3D) {
this._endPoint = value;
}
constructor(animator: ParticleAnimator, particleBezierCurveNode: ParticleBezierCurveNode) {
super(animator, particleBezierCurveNode);
this._particleBezierCurveNode = particleBezierCurveNode;
this._controlPoint = this._particleBezierCurveNode._iControlPoint;
this._endPoint = this._particleBezierCurveNode._iEndPoint;
}
public setRenderState(shader: ShaderBase, renderable: _Render_RenderableBase, animationElements: AnimationElements, animationRegisterData: AnimationRegisterData): void {
const controlIndex: number = animationRegisterData.getRegisterIndex(this._pAnimationNode, ParticleBezierCurveState.BEZIER_CONTROL_INDEX);
const endIndex: number = animationRegisterData.getRegisterIndex(this._pAnimationNode, ParticleBezierCurveState.BEZIER_END_INDEX);
if (this._particleBezierCurveNode.mode == ParticlePropertiesMode.LOCAL_STATIC) {
animationElements.activateVertexBuffer(controlIndex, this._particleBezierCurveNode._iDataOffset, shader.stage, ContextGLVertexBufferFormat.FLOAT_3);
animationElements.activateVertexBuffer(endIndex, this._particleBezierCurveNode._iDataOffset + 3, shader.stage, ContextGLVertexBufferFormat.FLOAT_3);
} else {
shader.setVertexConst(controlIndex, this._controlPoint.x, this._controlPoint.y, this._controlPoint.z);
shader.setVertexConst(endIndex, this._endPoint.x, this._endPoint.y, this._endPoint.z);
}
}
}