133 lines
3.4 KiB
TypeScript
133 lines
3.4 KiB
TypeScript
|
|
/**
|
||
|
|
* @zh 状态事件节点 - 状态机状态变化时触发
|
||
|
|
* @en Event State Node - Triggered on state machine state changes
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { BlueprintNodeTemplate, BlueprintNode } from '../../types/nodes';
|
||
|
|
import { ExecutionResult } from '../../runtime/ExecutionContext';
|
||
|
|
import { INodeExecutor, RegisterNode } from '../../runtime/NodeRegistry';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @zh EventStateEnter 节点模板
|
||
|
|
* @en EventStateEnter node template
|
||
|
|
*/
|
||
|
|
export const EventStateEnterTemplate: BlueprintNodeTemplate = {
|
||
|
|
type: 'EventStateEnter',
|
||
|
|
title: 'Event State Enter',
|
||
|
|
category: 'event',
|
||
|
|
color: '#CC0000',
|
||
|
|
description: 'Triggered when entering a state / 进入状态时触发',
|
||
|
|
keywords: ['state', 'enter', 'fsm', 'machine', 'event'],
|
||
|
|
menuPath: ['Event', 'State', 'Enter'],
|
||
|
|
inputs: [
|
||
|
|
{
|
||
|
|
name: 'stateName',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'State Name',
|
||
|
|
defaultValue: ''
|
||
|
|
}
|
||
|
|
],
|
||
|
|
outputs: [
|
||
|
|
{
|
||
|
|
name: 'exec',
|
||
|
|
type: 'exec',
|
||
|
|
displayName: ''
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'stateMachineId',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'State Machine'
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'currentState',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'Current State'
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'previousState',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'Previous State'
|
||
|
|
}
|
||
|
|
]
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @zh EventStateEnter 节点执行器
|
||
|
|
* @en EventStateEnter node executor
|
||
|
|
*/
|
||
|
|
@RegisterNode(EventStateEnterTemplate)
|
||
|
|
export class EventStateEnterExecutor implements INodeExecutor {
|
||
|
|
execute(node: BlueprintNode): ExecutionResult {
|
||
|
|
return {
|
||
|
|
nextExec: 'exec',
|
||
|
|
outputs: {
|
||
|
|
stateMachineId: '',
|
||
|
|
currentState: node.data?.stateName ?? '',
|
||
|
|
previousState: ''
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @zh EventStateExit 节点模板
|
||
|
|
* @en EventStateExit node template
|
||
|
|
*/
|
||
|
|
export const EventStateExitTemplate: BlueprintNodeTemplate = {
|
||
|
|
type: 'EventStateExit',
|
||
|
|
title: 'Event State Exit',
|
||
|
|
category: 'event',
|
||
|
|
color: '#CC0000',
|
||
|
|
description: 'Triggered when exiting a state / 退出状态时触发',
|
||
|
|
keywords: ['state', 'exit', 'leave', 'fsm', 'machine', 'event'],
|
||
|
|
menuPath: ['Event', 'State', 'Exit'],
|
||
|
|
inputs: [
|
||
|
|
{
|
||
|
|
name: 'stateName',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'State Name',
|
||
|
|
defaultValue: ''
|
||
|
|
}
|
||
|
|
],
|
||
|
|
outputs: [
|
||
|
|
{
|
||
|
|
name: 'exec',
|
||
|
|
type: 'exec',
|
||
|
|
displayName: ''
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'stateMachineId',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'State Machine'
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'currentState',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'Current State'
|
||
|
|
},
|
||
|
|
{
|
||
|
|
name: 'previousState',
|
||
|
|
type: 'string',
|
||
|
|
displayName: 'Previous State'
|
||
|
|
}
|
||
|
|
]
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @zh EventStateExit 节点执行器
|
||
|
|
* @en EventStateExit node executor
|
||
|
|
*/
|
||
|
|
@RegisterNode(EventStateExitTemplate)
|
||
|
|
export class EventStateExitExecutor implements INodeExecutor {
|
||
|
|
execute(node: BlueprintNode): ExecutionResult {
|
||
|
|
return {
|
||
|
|
nextExec: 'exec',
|
||
|
|
outputs: {
|
||
|
|
stateMachineId: '',
|
||
|
|
currentState: '',
|
||
|
|
previousState: node.data?.stateName ?? ''
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|