@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
272 lines • 12.2 kB
JavaScript
import { __decorate } from "../../../tslib.es6.js";
import { RegisterClass } from "../../../Misc/typeStore.js";
import { Vector2, Vector3 } from "../../../Maths/math.vector.js";
import { editableInPropertyPage } from "../../../Decorators/nodeDecorator.js";
import { NodeParticleBlock } from "../nodeParticleBlock.js";
import { NodeParticleBlockConnectionPointTypes } from "../Enums/nodeParticleBlockConnectionPointTypes.js";
import { Color4 } from "../../../Maths/math.color.js";
/**
* Operations supported by the Trigonometry block
*/
export var ParticleTrigonometryBlockOperations;
(function (ParticleTrigonometryBlockOperations) {
/** Cos */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Cos"] = 0] = "Cos";
/** Sin */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Sin"] = 1] = "Sin";
/** Abs */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Abs"] = 2] = "Abs";
/** Exp */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Exp"] = 3] = "Exp";
/** Exp2 */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Exp2"] = 4] = "Exp2";
/** Round */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Round"] = 5] = "Round";
/** Floor */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Floor"] = 6] = "Floor";
/** Ceiling */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Ceiling"] = 7] = "Ceiling";
/** Square root */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Sqrt"] = 8] = "Sqrt";
/** Log */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Log"] = 9] = "Log";
/** Tangent */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Tan"] = 10] = "Tan";
/** Arc tangent */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["ArcTan"] = 11] = "ArcTan";
/** Arc cosinus */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["ArcCos"] = 12] = "ArcCos";
/** Arc sinus */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["ArcSin"] = 13] = "ArcSin";
/** Sign */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Sign"] = 14] = "Sign";
/** Negate */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Negate"] = 15] = "Negate";
/** OneMinus */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["OneMinus"] = 16] = "OneMinus";
/** Reciprocal */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Reciprocal"] = 17] = "Reciprocal";
/** ToDegrees */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["ToDegrees"] = 18] = "ToDegrees";
/** ToRadians */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["ToRadians"] = 19] = "ToRadians";
/** Fract */
ParticleTrigonometryBlockOperations[ParticleTrigonometryBlockOperations["Fract"] = 20] = "Fract";
})(ParticleTrigonometryBlockOperations || (ParticleTrigonometryBlockOperations = {}));
/**
* Block used to apply trigonometry operation to floats
*/
export class ParticleTrigonometryBlock extends NodeParticleBlock {
/**
* Creates a new GeometryTrigonometryBlock
* @param name defines the block name
*/
constructor(name) {
super(name);
/**
* Gets or sets the operation applied by the block
*/
this.operation = ParticleTrigonometryBlockOperations.Cos;
this.registerInput("input", NodeParticleBlockConnectionPointTypes.AutoDetect);
this.registerOutput("output", NodeParticleBlockConnectionPointTypes.BasedOnInput);
this._outputs[0]._typeConnectionSource = this._inputs[0];
this._inputs[0].addExcludedConnectionPointFromAllowedTypes(NodeParticleBlockConnectionPointTypes.Float |
NodeParticleBlockConnectionPointTypes.Int |
NodeParticleBlockConnectionPointTypes.Vector2 |
NodeParticleBlockConnectionPointTypes.Vector3 |
NodeParticleBlockConnectionPointTypes.Color4);
}
/**
* Gets the current class name
* @returns the class name
*/
getClassName() {
return "ParticleTrigonometryBlock";
}
/**
* Gets the input component
*/
get input() {
return this._inputs[0];
}
/**
* Gets the output component
*/
get output() {
return this._outputs[0];
}
_build(state) {
super._build(state);
let func = null;
switch (this.operation) {
case ParticleTrigonometryBlockOperations.Cos: {
func = (value) => Math.cos(value);
break;
}
case ParticleTrigonometryBlockOperations.Sin: {
func = (value) => Math.sin(value);
break;
}
case ParticleTrigonometryBlockOperations.Abs: {
func = (value) => Math.abs(value);
break;
}
case ParticleTrigonometryBlockOperations.Exp: {
func = (value) => Math.exp(value);
break;
}
case ParticleTrigonometryBlockOperations.Exp2: {
func = (value) => Math.pow(2, value);
break;
}
case ParticleTrigonometryBlockOperations.Round: {
func = (value) => Math.round(value);
break;
}
case ParticleTrigonometryBlockOperations.Floor: {
func = (value) => Math.floor(value);
break;
}
case ParticleTrigonometryBlockOperations.Ceiling: {
func = (value) => Math.ceil(value);
break;
}
case ParticleTrigonometryBlockOperations.Sqrt: {
func = (value) => Math.sqrt(value);
break;
}
case ParticleTrigonometryBlockOperations.Log: {
func = (value) => Math.log(value);
break;
}
case ParticleTrigonometryBlockOperations.Tan: {
func = (value) => Math.tan(value);
break;
}
case ParticleTrigonometryBlockOperations.ArcTan: {
func = (value) => Math.atan(value);
break;
}
case ParticleTrigonometryBlockOperations.ArcCos: {
func = (value) => Math.acos(value);
break;
}
case ParticleTrigonometryBlockOperations.ArcSin: {
func = (value) => Math.asin(value);
break;
}
case ParticleTrigonometryBlockOperations.Sign: {
func = (value) => Math.sign(value);
break;
}
case ParticleTrigonometryBlockOperations.Negate: {
func = (value) => -value;
break;
}
case ParticleTrigonometryBlockOperations.OneMinus: {
func = (value) => 1 - value;
break;
}
case ParticleTrigonometryBlockOperations.Reciprocal: {
func = (value) => 1 / value;
break;
}
case ParticleTrigonometryBlockOperations.ToRadians: {
func = (value) => (value * Math.PI) / 180;
break;
}
case ParticleTrigonometryBlockOperations.ToDegrees: {
func = (value) => (value * 180) / Math.PI;
break;
}
case ParticleTrigonometryBlockOperations.Fract: {
func = (value) => {
if (value >= 0) {
return value - Math.floor(value);
}
else {
return value - Math.ceil(value);
}
};
break;
}
}
if (!func) {
this.output._storedFunction = null;
this.output._storedValue = null;
return;
}
switch (this.input.type) {
case NodeParticleBlockConnectionPointTypes.Int:
case NodeParticleBlockConnectionPointTypes.Float: {
this.output._storedFunction = (state) => {
const source = this.input.getConnectedValue(state);
return func(source);
};
break;
}
case NodeParticleBlockConnectionPointTypes.Vector2: {
this.output._storedFunction = (state) => {
const source = this.input.getConnectedValue(state);
return new Vector2(func(source.x), func(source.y));
};
break;
}
case NodeParticleBlockConnectionPointTypes.Vector3: {
this.output._storedFunction = (state) => {
const source = this.input.getConnectedValue(state);
return new Vector3(func(source.x), func(source.y), func(source.z));
};
break;
}
case NodeParticleBlockConnectionPointTypes.Color4: {
this.output._storedFunction = (state) => {
const source = this.input.getConnectedValue(state);
return new Color4(func(source.r), func(source.g), func(source.b), func(source.a));
};
break;
}
}
return this;
}
serialize() {
const serializationObject = super.serialize();
serializationObject.operation = this.operation;
return serializationObject;
}
_deserialize(serializationObject) {
super._deserialize(serializationObject);
this.operation = serializationObject.operation;
}
}
__decorate([
editableInPropertyPage("Operation", 5 /* PropertyTypeForEdition.List */, "ADVANCED", {
embedded: true,
notifiers: { rebuild: true },
options: [
{ label: "Cos", value: ParticleTrigonometryBlockOperations.Cos },
{ label: "Sin", value: ParticleTrigonometryBlockOperations.Sin },
{ label: "Abs", value: ParticleTrigonometryBlockOperations.Abs },
{ label: "Exp", value: ParticleTrigonometryBlockOperations.Exp },
{ label: "Exp2", value: ParticleTrigonometryBlockOperations.Exp2 },
{ label: "Round", value: ParticleTrigonometryBlockOperations.Round },
{ label: "Floor", value: ParticleTrigonometryBlockOperations.Floor },
{ label: "Ceiling", value: ParticleTrigonometryBlockOperations.Ceiling },
{ label: "Sqrt", value: ParticleTrigonometryBlockOperations.Sqrt },
{ label: "Log", value: ParticleTrigonometryBlockOperations.Log },
{ label: "Tan", value: ParticleTrigonometryBlockOperations.Tan },
{ label: "ArcTan", value: ParticleTrigonometryBlockOperations.ArcTan },
{ label: "ArcCos", value: ParticleTrigonometryBlockOperations.ArcCos },
{ label: "ArcSin", value: ParticleTrigonometryBlockOperations.ArcSin },
{ label: "Sign", value: ParticleTrigonometryBlockOperations.Sign },
{ label: "Negate", value: ParticleTrigonometryBlockOperations.Negate },
{ label: "OneMinus", value: ParticleTrigonometryBlockOperations.OneMinus },
{ label: "Reciprocal", value: ParticleTrigonometryBlockOperations.Reciprocal },
{ label: "ToDegrees", value: ParticleTrigonometryBlockOperations.ToDegrees },
{ label: "ToRadians", value: ParticleTrigonometryBlockOperations.ToRadians },
{ label: "Fract", value: ParticleTrigonometryBlockOperations.Fract },
],
})
], ParticleTrigonometryBlock.prototype, "operation", void 0);
RegisterClass("BABYLON.ParticleTrigonometryBlock", ParticleTrigonometryBlock);
//# sourceMappingURL=particleTrigonometryBlock.js.map