clampBlock.ts 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import { NodeMaterialBlock } from '../nodeMaterialBlock';
  2. import { NodeMaterialBlockConnectionPointTypes } from '../Enums/nodeMaterialBlockConnectionPointTypes';
  3. import { NodeMaterialBuildState } from '../nodeMaterialBuildState';
  4. import { NodeMaterialConnectionPoint } from '../nodeMaterialBlockConnectionPoint';
  5. import { NodeMaterialBlockTargets } from '../Enums/nodeMaterialBlockTargets';
  6. import { _TypeStore } from '../../../Misc/typeStore';
  7. import { Scene } from '../../../scene';
  8. import { editableInPropertyPage, PropertyTypeForEdition } from "../nodeMaterialDecorator";
  9. /**
  10. * Block used to clamp a float
  11. */
  12. export class ClampBlock extends NodeMaterialBlock {
  13. /** Gets or sets the minimum range */
  14. @editableInPropertyPage("Minimum", PropertyTypeForEdition.Float)
  15. public minimum = 0.0;
  16. /** Gets or sets the maximum range */
  17. @editableInPropertyPage("Maximum", PropertyTypeForEdition.Float)
  18. public maximum = 1.0;
  19. /**
  20. * Creates a new ClampBlock
  21. * @param name defines the block name
  22. */
  23. public constructor(name: string) {
  24. super(name, NodeMaterialBlockTargets.Neutral);
  25. this.registerInput("value", NodeMaterialBlockConnectionPointTypes.AutoDetect);
  26. this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.BasedOnInput);
  27. this._outputs[0]._typeConnectionSource = this._inputs[0];
  28. }
  29. /**
  30. * Gets the current class name
  31. * @returns the class name
  32. */
  33. public getClassName() {
  34. return "ClampBlock";
  35. }
  36. /**
  37. * Gets the value input component
  38. */
  39. public get value(): NodeMaterialConnectionPoint {
  40. return this._inputs[0];
  41. }
  42. /**
  43. * Gets the output component
  44. */
  45. public get output(): NodeMaterialConnectionPoint {
  46. return this._outputs[0];
  47. }
  48. protected _buildBlock(state: NodeMaterialBuildState) {
  49. super._buildBlock(state);
  50. let output = this._outputs[0];
  51. state.compilationString += this._declareOutput(output, state) + ` = clamp(${this.value.associatedVariableName}, ${this._writeFloat(this.minimum)}, ${this._writeFloat(this.maximum)});\r\n`;
  52. return this;
  53. }
  54. protected _dumpPropertiesCode() {
  55. var codeString = `${this._codeVariableName}.minimum = ${this.minimum};\r\n`;
  56. codeString += `${this._codeVariableName}.maximum = ${this.maximum};\r\n`;
  57. return codeString;
  58. }
  59. public serialize(): any {
  60. let serializationObject = super.serialize();
  61. serializationObject.minimum = this.minimum;
  62. serializationObject.maximum = this.maximum;
  63. return serializationObject;
  64. }
  65. public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {
  66. super._deserialize(serializationObject, scene, rootUrl);
  67. this.minimum = serializationObject.minimum;
  68. this.maximum = serializationObject.maximum;
  69. }
  70. }
  71. _TypeStore.RegisteredTypes["BABYLON.ClampBlock"] = ClampBlock;