diff --git a/packages/api/src/extensions/tree.ts b/packages/api/src/extensions/tree.ts index 8bfa853..bc905f3 100644 --- a/packages/api/src/extensions/tree.ts +++ b/packages/api/src/extensions/tree.ts @@ -28,6 +28,7 @@ export type ContextMenuButtonMetadata = Omit; export interface PixiMetadata { type: PixiNodeType; locked?: boolean; + visible?: boolean; suffix?: string; buttons?: ButtonMetadata[]; contextMenu?: ContextMenuButtonMetadata[]; diff --git a/packages/backend/src/scene/tree/tree.ts b/packages/backend/src/scene/tree/tree.ts index 8b95dc5..0427c33 100644 --- a/packages/backend/src/scene/tree/tree.ts +++ b/packages/backend/src/scene/tree/tree.ts @@ -94,6 +94,7 @@ export class Tree extends PixiHandler { metadata: { type, locked: container.__devtoolLocked, + visible: container.visible, uid: this._getId(container), suffix, buttons: [], @@ -129,6 +130,10 @@ export class Tree extends PixiHandler { node.__devtoolLocked = value; } + if (buttonAction === 'visible') { + node.visible = value ?? true; + } + this._onButtonPressExtensions.forEach((ext) => { ext.onButtonPress(node, buttonAction, value); }); diff --git a/packages/frontend/src/pages/scene/graph/tree/node-trigger.tsx b/packages/frontend/src/pages/scene/graph/tree/node-trigger.tsx index e75834b..51b67c5 100644 --- a/packages/frontend/src/pages/scene/graph/tree/node-trigger.tsx +++ b/packages/frontend/src/pages/scene/graph/tree/node-trigger.tsx @@ -4,6 +4,8 @@ import { FaMinus as LayerIconOpen, FaLock as LockIcon, FaLockOpen as LockOpenIcon, + FaEye as VisibleIcon, + FaEyeSlash as HiddenIcon, // FaRegObjectGroup as SceneNodeIcon, } from 'react-icons/fa6'; import { Input } from '../../../../components/ui/input'; @@ -73,6 +75,21 @@ export const NodeTrigger: React.FC<{ {node.data.metadata.buttons?.map((button, i) => ( ))} + : } + node={node} + className="mt-[-2px] w-[20px] px-1 py-0.5" + bridge={bridge} + /> + } + tip={'Toggle the visibility of the node.'} + />