import { NodeMaterial } from "babylonjs/Materials/Node/nodeMaterial"; import { Nullable } from "babylonjs/types"; import { Observable } from 'babylonjs/Misc/observable'; import { LogEntry } from './components/log/logComponent'; import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock'; import { PreviewMeshType } from './components/preview/previewMeshType'; import { DataStorage } from 'babylonjs/Misc/dataStorage'; import { Color4 } from 'babylonjs/Maths/math.color'; import { GraphNode } from './diagram/graphNode'; import { Vector2 } from 'babylonjs/Maths/math.vector'; import { NodePort } from './diagram/nodePort'; import { NodeLink } from './diagram/nodeLink'; import { GraphFrame } from './diagram/graphFrame'; import { FrameNodePort } from './diagram/frameNodePort'; import { FramePortData } from './diagram/graphCanvas'; import { NodeMaterialModes } from 'babylonjs/Materials/Node/Enums/nodeMaterialModes'; export class GlobalState { nodeMaterial: NodeMaterial; hostElement: HTMLElement; hostDocument: HTMLDocument; hostWindow: Window; onSelectionChangedObservable = new Observable>(); onRebuildRequiredObservable = new Observable(); onBuiltObservable = new Observable(); onResetRequiredObservable = new Observable(); onUpdateRequiredObservable = new Observable(); onZoomToFitRequiredObservable = new Observable(); onReOrganizedRequiredObservable = new Observable(); onLogRequiredObservable = new Observable(); onErrorMessageDialogRequiredObservable = new Observable(); onIsLoadingChanged = new Observable(); onPreviewCommandActivated = new Observable(); onLightUpdated = new Observable(); onPreviewBackgroundChanged = new Observable(); onBackFaceCullingChanged = new Observable(); onDepthPrePassChanged = new Observable(); onAnimationCommandActivated = new Observable(); onCandidateLinkMoved = new Observable>(); onSelectionBoxMoved = new Observable(); onFrameCreatedObservable = new Observable(); onCandidatePortSelectedObservable = new Observable>(); onGraphNodeRemovalObservable = new Observable(); onGetNodeFromBlock: (block: NodeMaterialBlock) => GraphNode; onGridSizeChanged = new Observable(); onExposePortOnFrameObservable = new Observable(); previewMeshType: PreviewMeshType; previewMeshFile: File; listOfCustomPreviewMeshFiles: File[] = []; rotatePreview: boolean; backgroundColor: Color4; backFaceCulling: boolean; depthPrePass: boolean; blockKeyboardEvents = false; hemisphericLight: boolean; directionalLight0: boolean; directionalLight1: boolean; controlCamera: boolean; storeEditorData: (serializationObject: any) => void; _mode: NodeMaterialModes; /** Gets the mode */ public get mode(): NodeMaterialModes { return this._mode; } /** Sets the mode */ public set mode(m: NodeMaterialModes) { DataStorage.WriteNumber("Mode", m); this._mode = m; this.onPreviewCommandActivated.notifyObservers(true); } customSave?: {label: string, action: (data: string) => Promise}; public constructor() { this.previewMeshType = DataStorage.ReadNumber("PreviewMeshType", PreviewMeshType.Box); this.backFaceCulling = DataStorage.ReadBoolean("BackFaceCulling", true); this.depthPrePass = DataStorage.ReadBoolean("DepthPrePass", false); this.hemisphericLight = DataStorage.ReadBoolean("HemisphericLight", true); this.directionalLight0 = DataStorage.ReadBoolean("DirectionalLight0", false); this.directionalLight1 = DataStorage.ReadBoolean("DirectionalLight1", false); this.controlCamera = DataStorage.ReadBoolean("ControlCamera", true); this._mode = DataStorage.ReadNumber("Mode", NodeMaterialModes.Material); let r = DataStorage.ReadNumber("BackgroundColorR", 0.12549019607843137); let g = DataStorage.ReadNumber("BackgroundColorG", 0.09803921568627451); let b = DataStorage.ReadNumber("BackgroundColorB", 0.25098039215686274); this.backgroundColor = new Color4(r, g, b, 1.0); } }