refactor: reorganize package structure and decouple framework packages (#338)

* refactor: reorganize package structure and decouple framework packages

## Package Structure Reorganization
- Reorganized 55 packages into categorized subdirectories:
  - packages/framework/ - Generic framework (Laya/Cocos compatible)
  - packages/engine/ - ESEngine core modules
  - packages/rendering/ - Rendering modules (WASM dependent)
  - packages/physics/ - Physics modules
  - packages/streaming/ - World streaming
  - packages/network-ext/ - Network extensions
  - packages/editor/ - Editor framework and plugins
  - packages/rust/ - Rust WASM engine
  - packages/tools/ - Build tools and SDK

## Framework Package Decoupling
- Decoupled behavior-tree and blueprint packages from ESEngine dependencies
- Created abstracted interfaces (IBTAssetManager, IBehaviorTreeAssetContent)
- ESEngine-specific code moved to esengine/ subpath exports
- Framework packages now usable with Cocos/Laya without ESEngine

## CI Configuration
- Updated CI to only type-check and lint framework packages
- Added type-check:framework and lint:framework scripts

## Breaking Changes
- Package import paths changed due to directory reorganization
- ESEngine integrations now use subpath imports (e.g., '@esengine/behavior-tree/esengine')

* fix: update es-engine file path after directory reorganization

* docs: update README to focus on framework over engine

* ci: only build framework packages, remove Rust/WASM dependencies

* fix: remove esengine subpath from behavior-tree and blueprint builds

ESEngine integration code will only be available in full engine builds.
Framework packages are now purely engine-agnostic.

* fix: move network-protocols to framework, build both in CI

* fix: update workflow paths from packages/core to packages/framework/core

* fix: exclude esengine folder from type-check in behavior-tree and blueprint

* fix: update network tsconfig references to new paths

* fix: add test:ci:framework to only test framework packages in CI

* fix: only build core and math npm packages in CI

* fix: exclude test files from CodeQL and fix string escaping security issue
This commit is contained in:
YHH
2025-12-26 14:50:35 +08:00
committed by GitHub
parent a84ff902e4
commit 155411e743
1936 changed files with 4147 additions and 11578 deletions

View File

@@ -0,0 +1,248 @@
export enum BlackboardValueType {
// 基础类型
String = 'string',
Number = 'number',
Boolean = 'boolean',
// 数学类型
Vector2 = 'vector2',
Vector3 = 'vector3',
Vector4 = 'vector4',
Quaternion = 'quaternion',
Color = 'color',
// 引用类型
GameObject = 'gameObject',
Transform = 'transform',
Component = 'component',
AssetReference = 'assetReference',
// 集合类型
Array = 'array',
Map = 'map',
// 高级类型
Enum = 'enum',
Struct = 'struct',
Function = 'function',
// 游戏特定类型
EntityId = 'entityId',
NodePath = 'nodePath',
ResourcePath = 'resourcePath',
AnimationState = 'animationState',
AudioClip = 'audioClip',
Material = 'material',
Texture = 'texture'
}
export interface Vector2 {
x: number;
y: number;
}
export interface Vector3 extends Vector2 {
z: number;
}
export interface Vector4 extends Vector3 {
w: number;
}
export interface Quaternion {
x: number;
y: number;
z: number;
w: number;
}
export interface Color {
r: number;
g: number;
b: number;
a: number;
}
export interface BlackboardTypeDefinition {
type: BlackboardValueType;
displayName: string;
category: 'basic' | 'math' | 'reference' | 'collection' | 'advanced' | 'game';
defaultValue: any;
editorComponent?: string; // 自定义编辑器组件
validator?: (value: any) => boolean;
converter?: (value: any) => any;
}
export const BlackboardTypes: Record<BlackboardValueType, BlackboardTypeDefinition> = {
[BlackboardValueType.String]: {
type: BlackboardValueType.String,
displayName: '字符串',
category: 'basic',
defaultValue: '',
validator: (v) => typeof v === 'string'
},
[BlackboardValueType.Number]: {
type: BlackboardValueType.Number,
displayName: '数字',
category: 'basic',
defaultValue: 0,
validator: (v) => typeof v === 'number'
},
[BlackboardValueType.Boolean]: {
type: BlackboardValueType.Boolean,
displayName: '布尔值',
category: 'basic',
defaultValue: false,
validator: (v) => typeof v === 'boolean'
},
[BlackboardValueType.Vector2]: {
type: BlackboardValueType.Vector2,
displayName: '二维向量',
category: 'math',
defaultValue: { x: 0, y: 0 },
editorComponent: 'Vector2Editor',
validator: (v) => v && typeof v.x === 'number' && typeof v.y === 'number'
},
[BlackboardValueType.Vector3]: {
type: BlackboardValueType.Vector3,
displayName: '三维向量',
category: 'math',
defaultValue: { x: 0, y: 0, z: 0 },
editorComponent: 'Vector3Editor',
validator: (v) => v && typeof v.x === 'number' && typeof v.y === 'number' && typeof v.z === 'number'
},
[BlackboardValueType.Color]: {
type: BlackboardValueType.Color,
displayName: '颜色',
category: 'math',
defaultValue: { r: 1, g: 1, b: 1, a: 1 },
editorComponent: 'ColorEditor',
validator: (v) => v && typeof v.r === 'number' && typeof v.g === 'number' && typeof v.b === 'number' && typeof v.a === 'number'
},
[BlackboardValueType.GameObject]: {
type: BlackboardValueType.GameObject,
displayName: '游戏对象',
category: 'reference',
defaultValue: null,
editorComponent: 'GameObjectPicker'
},
[BlackboardValueType.Transform]: {
type: BlackboardValueType.Transform,
displayName: '变换组件',
category: 'reference',
defaultValue: null,
editorComponent: 'ComponentPicker'
},
[BlackboardValueType.AssetReference]: {
type: BlackboardValueType.AssetReference,
displayName: '资源引用',
category: 'reference',
defaultValue: null,
editorComponent: 'AssetPicker'
},
[BlackboardValueType.EntityId]: {
type: BlackboardValueType.EntityId,
displayName: '实体ID',
category: 'game',
defaultValue: -1,
validator: (v) => typeof v === 'number' && v >= -1
},
[BlackboardValueType.ResourcePath]: {
type: BlackboardValueType.ResourcePath,
displayName: '资源路径',
category: 'game',
defaultValue: '',
editorComponent: 'AssetPathPicker'
},
[BlackboardValueType.Array]: {
type: BlackboardValueType.Array,
displayName: '数组',
category: 'collection',
defaultValue: [],
editorComponent: 'ArrayEditor'
},
[BlackboardValueType.Map]: {
type: BlackboardValueType.Map,
displayName: '映射表',
category: 'collection',
defaultValue: {},
editorComponent: 'MapEditor'
},
[BlackboardValueType.Enum]: {
type: BlackboardValueType.Enum,
displayName: '枚举',
category: 'advanced',
defaultValue: '',
editorComponent: 'EnumPicker'
},
[BlackboardValueType.AnimationState]: {
type: BlackboardValueType.AnimationState,
displayName: '动画状态',
category: 'game',
defaultValue: '',
editorComponent: 'AnimationStatePicker'
},
[BlackboardValueType.AudioClip]: {
type: BlackboardValueType.AudioClip,
displayName: '音频片段',
category: 'game',
defaultValue: null,
editorComponent: 'AudioClipPicker'
},
[BlackboardValueType.Material]: {
type: BlackboardValueType.Material,
displayName: '材质',
category: 'game',
defaultValue: null,
editorComponent: 'MaterialPicker'
},
[BlackboardValueType.Texture]: {
type: BlackboardValueType.Texture,
displayName: '纹理',
category: 'game',
defaultValue: null,
editorComponent: 'TexturePicker'
},
[BlackboardValueType.Vector4]: {
type: BlackboardValueType.Vector4,
displayName: '四维向量',
category: 'math',
defaultValue: { x: 0, y: 0, z: 0, w: 0 },
editorComponent: 'Vector4Editor'
},
[BlackboardValueType.Quaternion]: {
type: BlackboardValueType.Quaternion,
displayName: '四元数',
category: 'math',
defaultValue: { x: 0, y: 0, z: 0, w: 1 },
editorComponent: 'QuaternionEditor'
},
[BlackboardValueType.Component]: {
type: BlackboardValueType.Component,
displayName: '组件',
category: 'reference',
defaultValue: null,
editorComponent: 'ComponentPicker'
},
[BlackboardValueType.Struct]: {
type: BlackboardValueType.Struct,
displayName: '结构体',
category: 'advanced',
defaultValue: {},
editorComponent: 'StructEditor'
},
[BlackboardValueType.Function]: {
type: BlackboardValueType.Function,
displayName: '函数',
category: 'advanced',
defaultValue: null,
editorComponent: 'FunctionPicker'
},
[BlackboardValueType.NodePath]: {
type: BlackboardValueType.NodePath,
displayName: '节点路径',
category: 'game',
defaultValue: '',
editorComponent: 'NodePathPicker'
}
};