threepipe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IViewerPlugin.ts 2.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import {IUiConfigContainer, UiConfigContainer} from 'uiconfig.js'
  2. import {Class, IDisposable, IJSONSerializable} from 'ts-browser-helpers'
  3. import {SerializationMetaType} from '../utils'
  4. import {ISerializedConfig, ThreeViewer} from './ThreeViewer'
  5. /**
  6. * Interface for Viewer Plugins
  7. * @category Viewer
  8. */
  9. export interface IViewerPlugin<TViewer extends ThreeViewer = ThreeViewer, IsSync extends boolean = boolean>
  10. extends IUiConfigContainer, Partial<IJSONSerializable<ISerializedConfig, SerializationMetaType>>, IDisposable, Partial<UiConfigContainer> {
  11. // all classes must have this static property with a unique identifier value for this plugin
  12. constructor: {
  13. PluginType: string
  14. }
  15. // these plugins will be added automatically(with default settings), if they are not added yet.
  16. dependencies?: Class<IViewerPlugin<TViewer, IsSync>>[]
  17. // Called when this plug-in is added to the viewer
  18. onAdded(viewer: TViewer): IsSync extends false ? Promise<void> : void;
  19. // Called when this plug-in is removed from the viewer
  20. onRemove(viewer: TViewer): IsSync extends false ? Promise<void> : void;
  21. // the viewer will render the next frame if this is set to true
  22. dirty?: boolean;
  23. serializeWithViewer?: boolean | undefined // default = true (if toJSON is implemented)
  24. // store and load state to/from local storage
  25. storeState?: (prefix?: string, storage?: Storage, data?: any) => void;
  26. loadState?: (prefix?: string, storage?: Storage) => Promise<void>;
  27. }
  28. export interface IViewerPluginSync<TViewer extends ThreeViewer = ThreeViewer> extends IViewerPlugin<TViewer, true> {
  29. onAdded(viewer: TViewer): void;
  30. onRemove(viewer: TViewer): void;
  31. dependencies?: Class<IViewerPluginSync>[]
  32. }
  33. export interface IViewerPluginAsync<TViewer extends ThreeViewer = ThreeViewer> extends IViewerPlugin<TViewer, false> {
  34. onAdded(viewer: TViewer): Promise<void>;
  35. onRemove(viewer: TViewer): Promise<void>;
  36. dependencies?: Class<IViewerPlugin>[]
  37. }