summaryrefslogtreecommitdiff
path: root/apps/web/src/services/renderer/nodes/base-node.ts
diff options
context:
space:
mode:
authorMaze <167211895+mazeincoding@users.noreply.github.com>2026-01-31 00:20:04 +0100
committerGitHub <noreply@github.com>2026-01-31 00:20:04 +0100
commit7bf0984698e43b9aa2dd879f65951318ed410390 (patch)
treeccf2cd590a47d550152afc07129cb55c71a9ec35 /apps/web/src/services/renderer/nodes/base-node.ts
parent0173db99448d1c4c6415dcf15272e17551b48b04 (diff)
downloadopencut-7bf0984698e43b9aa2dd879f65951318ed410390.tar.gz
codebase overhaul (#697)
Diffstat (limited to 'apps/web/src/services/renderer/nodes/base-node.ts')
-rw-r--r--apps/web/src/services/renderer/nodes/base-node.ts35
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 });
+ }
+ }
+}