diff options
Diffstat (limited to 'apps/web/src/services/renderer/nodes/base-node.ts')
| -rw-r--r-- | apps/web/src/services/renderer/nodes/base-node.ts | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/apps/web/src/services/renderer/nodes/base-node.ts b/apps/web/src/services/renderer/nodes/base-node.ts new file mode 100644 index 00000000..55bd055a --- /dev/null +++ b/apps/web/src/services/renderer/nodes/base-node.ts @@ -0,0 +1,35 @@ +import type { CanvasRenderer } from "../canvas-renderer"; + +export type BaseNodeParams = object | undefined; + +export class BaseNode<Params extends BaseNodeParams = BaseNodeParams> { + params: Params; + + constructor(params?: Params) { + this.params = params ?? ({} as Params); + } + + children: BaseNode[] = []; + + add(child: BaseNode) { + this.children.push(child); + return this; + } + + remove(child: BaseNode) { + this.children = this.children.filter((c) => c !== child); + return this; + } + + async render({ + renderer, + time, + }: { + renderer: CanvasRenderer; + time: number; + }): Promise<void> { + for (const child of this.children) { + await child.render({ renderer, time }); + } + } +} |
