remapDisplayManager.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { IDisplayManager } from './displayManager';
  2. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  3. import { InputBlock } from 'babylonjs/Materials/Node/Blocks/Input/inputBlock';
  4. import { RemapBlock } from 'babylonjs/Materials/Node/Blocks/remapBlock';
  5. import { NodeMaterialConnectionPoint } from 'babylonjs/Materials/Node/nodeMaterialBlockConnectionPoint';
  6. export class RemapDisplayManager implements IDisplayManager {
  7. public getHeaderClass(block: NodeMaterialBlock) {
  8. return "";
  9. }
  10. public shouldDisplayPortLabels(block: NodeMaterialBlock): boolean {
  11. return true;
  12. }
  13. public getHeaderText(block: NodeMaterialBlock): string {
  14. return block.name;
  15. }
  16. public getBackgroundColor(block: NodeMaterialBlock): string {
  17. return "#4086BB";
  18. }
  19. private _extractInputValue(connectionPoint: NodeMaterialConnectionPoint) {
  20. let connectedBlock = connectionPoint.connectedPoint!.ownerBlock;
  21. if (connectedBlock.isInput) {
  22. let inputBlock = connectedBlock as InputBlock;
  23. if (inputBlock.isUniform && !inputBlock.isSystemValue) {
  24. return inputBlock.value;
  25. }
  26. }
  27. return "?";
  28. }
  29. public updatePreviewContent(block: NodeMaterialBlock, contentArea: HTMLDivElement): void {
  30. const remapBlock = block as RemapBlock;
  31. let sourceRangeX = remapBlock.sourceMin.isConnected ? this._extractInputValue(remapBlock.sourceMin) : remapBlock.sourceRange.x;
  32. let sourceRangeY = remapBlock.sourceMax.isConnected ? this._extractInputValue(remapBlock.sourceMax) : remapBlock.sourceRange.y;
  33. let targetRangeX = remapBlock.targetMin.isConnected ? this._extractInputValue(remapBlock.targetMin) : remapBlock.targetRange.x;
  34. let targetRangeY = remapBlock.targetMax.isConnected ? this._extractInputValue(remapBlock.targetMax) : remapBlock.targetRange.y;
  35. contentArea.classList.add("remap-block");
  36. contentArea.innerHTML = `[${sourceRangeX}, ${sourceRangeY}] -> [${targetRangeX}, ${targetRangeY}]`;
  37. }
  38. }