/** * @file Game Controller Node - Interactive game controller visualization */ import * as React from "react"; import type { NodeDefinition, NodeRendererProps, InspectorRenderProps, ExternalDataReference, } from "../../../../../types/NodeDefinition"; import classes from "./GameControllerNode.module.css"; export type GameControllerData = { id: string; controllerType: "xbox" | "playstation" | "nintendo"; buttons: { a: boolean; b: boolean; x: boolean; y: boolean; lb: boolean; rb: boolean; lt: number; // 0-100 rt: number; // 0-100 }; dpad: { up: boolean; down: boolean; left: boolean; right: boolean; }; leftStick: { x: number; y: number }; // -100 to 100 rightStick: { x: number; y: number }; // -100 to 100 connected: boolean; battery: number; // 0-100 }; export const GameControllerRenderer = ({ node, isSelected, isDragging, externalData }: NodeRendererProps) => { const controllerData = externalData as GameControllerData | undefined; const getControllerColor = (type?: string) => { switch (type) { case "xbox": return "#107c10"; case "playstation": return "#003791"; case "nintendo": return "#e60012"; default: return "#6b7280"; } }; const controllerColor = getControllerColor(controllerData?.controllerType); const renderStick = (x: number, y: number) => { const centerX = 50; const centerY = 50; const stickX = centerX + (x / 100) * 30; const stickY = centerY + (y / 100) * 30; return ( ); }; return (