Source: scene/container/container-mixins/onRenderMixin.ts

  1. import type { Renderer } from '../../../rendering/renderers/types';
  2. import type { Container } from '../Container';
  3. export interface OnRenderMixinConstructor
  4. {
  5. onRender?: ((renderer: Renderer) => void | null);
  6. }
  7. export interface OnRenderMixin extends Required<OnRenderMixinConstructor>
  8. {
  9. _onRender: ((renderer: Renderer) => void) | null;
  10. }
  11. export const onRenderMixin: Partial<Container> = {
  12. _onRender: null,
  13. set onRender(func: (renderer: Renderer) => void)
  14. {
  15. const renderGroup = this.renderGroup || this.parentRenderGroup;
  16. if (!func)
  17. {
  18. if (this._onRender)
  19. {
  20. renderGroup?.removeOnRender(this);
  21. }
  22. this._onRender = null;
  23. return;
  24. }
  25. if (!this._onRender)
  26. {
  27. renderGroup?.addOnRender(this);
  28. }
  29. this._onRender = func;
  30. },
  31. /**
  32. * This callback is used when the container is rendered. This is where you should add your custom
  33. * logic that is needed to be run every frame.
  34. *
  35. * In v7 many users used `updateTransform` for this, however the way v8 renders objects is different
  36. * and "updateTransform" is no longer called every frame
  37. * @example
  38. * const container = new Container();
  39. * container.onRender = () => {
  40. * container.rotation += 0.01;
  41. * };
  42. * @memberof scene.Container#
  43. */
  44. get onRender(): (renderer: Renderer) => void
  45. {
  46. return this._onRender;
  47. }
  48. } as Container;