Files
npc-config-app/src/types/nodes.ts

99 lines
2.5 KiB
TypeScript

import type { Node, Edge } from '@xyflow/react';
import type { NPCConfiguration, DialogueConfiguration } from './npc';
// Define the types of nodes available in the modular system
export type NodeType =
| 'basicInfo'
| 'battleConfig'
| 'party'
| 'interaction'
| 'variables'
| 'dialogue'
| 'output';
// Data structure for each node type
export interface BasicInfoNodeData extends Record<string, unknown> {
type: 'basicInfo';
resourceIdentifier: string;
names: string[];
hitbox: string | { width: number; height: number };
modelScale?: number;
aspects?: string[];
isInvulnerable?: boolean;
canDespawn?: boolean;
isMovable?: boolean;
isLeashable?: boolean;
allowProjectileHits?: boolean;
hideNameTag?: boolean;
}
export interface BattleConfigNodeData extends Record<string, unknown> {
type: 'battleConfig';
canBattle?: boolean;
canChallenge?: boolean;
battleTheme?: string;
victoryTheme?: string;
defeatTheme?: string;
simultaneousBattles?: boolean;
healAfterwards?: boolean;
}
export interface PartyNodeData extends Record<string, unknown> {
type: 'party';
partyConfig: NPCConfiguration['party'];
}
export interface InteractionNodeData extends Record<string, unknown> {
type: 'interaction';
interactionType: string;
interactionData?: Record<string, unknown>;
dialogueReference?: string;
scriptReference?: string;
}
export interface VariablesNodeData extends Record<string, unknown> {
type: 'variables';
configVariables: NPCConfiguration['config'];
}
export interface DialogueNodeData extends Record<string, unknown> {
type: 'dialogue';
dialogueConfig: DialogueConfiguration | null;
}
export interface OutputNodeData extends Record<string, unknown> {
type: 'output';
previewData?: NPCConfiguration;
}
// Union type for all node data types
export type ModularNodeData =
| BasicInfoNodeData
| BattleConfigNodeData
| PartyNodeData
| InteractionNodeData
| VariablesNodeData
| DialogueNodeData
| OutputNodeData;
// Extended Node type with our custom data
export type ModularNode = Node<ModularNodeData>;
// Workflow state that contains all nodes and edges
export interface WorkflowState {
nodes: ModularNode[];
edges: Edge[];
npcConfig: NPCConfiguration;
dialogueConfig: DialogueConfiguration | null;
}
// Node template for creating new nodes
export interface NodeTemplate {
type: NodeType;
label: string;
icon: string;
description: string;
color: string;
defaultData: Partial<ModularNodeData>;
}