@lightningjs/renderer
Version:
Lightning 3 Renderer
64 lines (63 loc) • 2.66 kB
TypeScript
import type { IAnimationController } from '../common/IAnimationController.js';
import { CoreNode, type CoreNodeAnimateProps, type CoreNodeProps } from '../core/CoreNode.js';
import type { CoreTextNode, CoreTextNodeProps } from '../core/CoreTextNode.js';
import type { AnimationSettings } from '../core/animations/CoreAnimation.js';
import type { BaseShaderController } from './ShaderController.js';
/**
* A visual Node in the Renderer scene graph.
*
* @remarks
* A Node is a basic building block of the Renderer scene graph. It can be a
* container for other Nodes, or it can be a leaf Node that renders a solid
* color, gradient, image, or specific texture, using a specific shader.
*
* For text rendering Nodes, see {@link ITextNode}.
*
* ## INode vs CoreNode
* CoreNode is the name of the class for a Renderer Node and is only directly
* used internally by the Renderer. INode describes the public API of a
* Renderer Node including the ability to be tied to a specific Shader.
*
* Users of the Renderer API, should generally interact with INode objects
* instead of CoreNode objects.
*/
export interface INode<SC extends BaseShaderController = BaseShaderController> extends Omit<CoreNode, 'shader' | 'animate' | 'parent'> {
shader: SC;
animate(props: Partial<INodeAnimateProps<SC>>, settings: Partial<AnimationSettings>): IAnimationController;
parent: INode | null;
}
/**
* Properties used to animate() a Node
*/
export interface INodeAnimateProps<SC extends BaseShaderController = BaseShaderController> extends Omit<CoreNodeAnimateProps, 'shaderProps'> {
shaderProps: Partial<SC['props']>;
}
/**
* Properties used to create a new Node
*/
export interface INodeProps<SC extends BaseShaderController = BaseShaderController> extends Omit<CoreNodeProps, 'shader' | 'parent'> {
shader: SC;
parent: INode | null;
}
/**
* A visual Node in the Renderer scene graph that renders text.
*
* @remarks
* A Text Node is a special type of Node that renders text using a specific
* text renderer, such as Web/Canvas or Signed Distance Field (SDF) text.
*
* For non-text rendering, see {@link INode}.
*
* Users of the Renderer API, should generally interact with ITextNode objects
* instead of CoreTextNode objects.
*/
export interface ITextNode extends Omit<CoreTextNode, 'animate' | 'parent'> {
animate(props: Partial<INodeAnimateProps<BaseShaderController>>, settings: Partial<AnimationSettings>): IAnimationController;
parent: INode | null;
}
/**
* Properties used to create a new Text Node
*/
export interface ITextNodeProps extends Omit<CoreTextNodeProps, 'parent'> {
parent: INode | null;
}