YHH
a049bbe2f5
fix: add private:true to packages not meant for npm ( #345 )
...
* fix(ci): run on all PRs with conditional skip
- Remove paths filter from pull_request trigger
- Add check-changes job to detect code changes
- Skip full CI if no code files changed
- Satisfies branch protection while avoiding unnecessary builds
* fix: add private:true to packages not meant for npm
Prevents changesets from trying to publish internal packages:
- engine/* (8 packages)
- rendering/* (8 packages)
- physics/* (2 packages)
- streaming/* (1 package)
- tools/sdk, tools/worker-generator
2025-12-26 17:45:00 +08:00
YHH
155411e743
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
2025-12-26 14:50:35 +08:00
YHH
a84ff902e4
fix: 修复 changesets 验证错误 ( #337 )
...
- 简化 ignore 配置,只保留 editor-app
- 设置内部包为 private: true
- build-config, engine, ecs-engine-bindgen
- editor-core, editor-runtime
- 所有 *-editor 插件包
这样 changesets 可以正常工作,private 包不会被发布
2025-12-26 09:06:52 +08:00
YHH
828ff969e1
feat(3d): FBX/GLTF/OBJ 加载器与骨骼动画支持 ( #315 )
...
* feat(3d): FBX/GLTF/OBJ 加载器与骨骼动画支持
* chore: 更新 pnpm-lock.yaml
* fix: 移除未使用的变量和方法
* fix: 修复 mesh-3d-editor tsconfig 引用路径
* fix: 修复正则表达式 ReDoS 漏洞
2025-12-23 15:34:01 +08:00
yhh
66d9f428b3
feat: 3D 编辑器支持 - 网格、相机、Gizmo
2025-12-22 12:40:43 +08:00
YHH
a1e1189f9d
feat(fairygui): FairyGUI 完整集成 ( #314 )
...
* feat(fairygui): FairyGUI ECS 集成核心架构
实现 FairyGUI 的 ECS 原生集成,完全替代旧 UI 系统:
核心类:
- GObject: UI 对象基类,支持变换、可见性、关联、齿轮
- GComponent: 容器组件,管理子对象和控制器
- GRoot: 根容器,管理焦点、弹窗、输入分发
- GGroup: 组容器,支持水平/垂直布局
抽象层:
- DisplayObject: 显示对象基类
- EventDispatcher: 事件分发
- Timer: 计时器
- Stage: 舞台,管理输入和缩放
布局系统:
- Relations: 约束关联管理
- RelationItem: 24 种关联类型
基础设施:
- Controller: 状态控制器
- Transition: 过渡动画
- ScrollPane: 滚动面板
- UIPackage: 包管理
- ByteBuffer: 二进制解析
* refactor(ui): 删除旧 UI 系统,使用 FairyGUI 替代
* feat(fairygui): 实现 UI 控件
- 添加显示类:Image、TextField、Graph
- 添加基础控件:GImage、GTextField、GGraph
- 添加交互控件:GButton、GProgressBar、GSlider
- 更新 IRenderCollector 支持 Graph 渲染
- 扩展 Controller 添加 selectedPageId
- 添加 STATE_CHANGED 事件类型
* feat(fairygui): 现代化架构重构
- 增强 EventDispatcher 支持类型安全、优先级和传播控制
- 添加 PropertyBinding 响应式属性绑定系统
- 添加 ServiceContainer 依赖注入容器
- 添加 UIConfig 全局配置系统
- 添加 UIObjectFactory 对象工厂
- 实现 RenderBridge 渲染桥接层
- 实现 Canvas2DBackend 作为默认渲染后端
- 扩展 IRenderCollector 支持更多图元类型
* feat(fairygui): 九宫格渲染和资源加载修复
- 修复 FGUIUpdateSystem 支持路径和 GUID 两种加载方式
- 修复 GTextInput 同时设置 _displayObject 和 _textField
- 实现九宫格渲染展开为 9 个子图元
- 添加 sourceWidth/sourceHeight 用于九宫格计算
- 添加 DOMTextRenderer 文本渲染层(临时方案)
* fix(fairygui): 修复 GGraph 颜色读取
* feat(fairygui): 虚拟节点 Inspector 和文本渲染支持
* fix(fairygui): 编辑器状态刷新和遗留引用修复
- 修复切换 FGUI 包后组件列表未刷新问题
- 修复切换组件后 viewport 未清理旧内容问题
- 修复虚拟节点在包加载后未刷新问题
- 重构为事件驱动架构,移除轮询机制
- 修复 @esengine/ui 遗留引用,统一使用 @esengine/fairygui
* fix: 移除 tsconfig 中的 @esengine/ui 引用
2025-12-22 10:52:54 +08:00
YHH
96b5403d14
refactor(render): 抽象图形后端并迁移渲染器 ( #313 )
...
* refactor(render): 抽象图形后端并迁移渲染器
- 新增 engine-shared 包,定义 GraphicsBackend trait 抽象层
- 实现 WebGL2Backend 作为首个后端实现
- 迁移 Renderer2D、SpriteBatch、GridRenderer、GizmoRenderer 使用新抽象
- 修复 VAO 创建时索引缓冲区绑定状态泄漏问题
- 新增 create_vertex_buffer_sized 方法支持预分配缓冲区
* fix(serialization): 修复序列化循环引用导致栈溢出
- 在 serializeValue 添加 WeakSet 检测循环引用
- 跳过已访问对象避免无限递归
* refactor(serialization): 提取 ValueSerializer 统一序列化逻辑
- 新增 ValueSerializer 模块,函数式设计
- 支持可扩展类型处理器注册
- 移除 ComponentSerializer/SceneSerializer 重复代码
- 内置 Date/Map/Set 类型支持
* fix: CodeQL 类型检查警告
2025-12-19 22:46:33 +08:00
YHH
ecdb8f2021
feat: UI输入框IME支持和编辑器Inspector重构 ( #310 )
...
UI系统改进:
- 添加 IMEHelper 支持中文/日文/韩文输入法
- UIInputFieldComponent 添加组合输入状态管理
- UIInputSystem 添加 IME 事件处理
- UIInputFieldRenderSystem 优化渲染逻辑
- UIRenderCollector 增强纹理处理
引擎改进:
- EngineBridge 添加新的渲染接口
- EngineRenderSystem 优化渲染流程
- Rust 引擎添加新的渲染功能
编辑器改进:
- 新增模块化 Inspector 组件架构
- EntityRefField 增强实体引用选择
- 优化 FlexLayoutDock 和 SceneHierarchy 样式
- 添加国际化文本
2025-12-19 15:45:14 +08:00
YHH
536c4c5593
refactor(ui): UI 系统架构重构 ( #309 )
...
* feat(ui): 动态图集系统与渲染调试增强
## 核心功能
### 动态图集系统 (Dynamic Atlas)
- 新增 DynamicAtlasManager:运行时纹理打包,支持 MaxRects 算法
- 新增 DynamicAtlasService:自动纹理加载与图集管理
- 新增 BinPacker:高效矩形打包算法
- 支持动态/固定两种扩展策略
- 自动 UV 重映射,实现 UI 元素合批渲染
### Frame Debugger 增强
- 新增合批分析面板,显示批次中断原因
- 新增 UI 元素层级信息(depth, worldOrderInLayer)
- 新增实体高亮功能,点击可在场景中定位
- 新增动态图集可视化面板
- 改进渲染原语详情展示
### 闪光效果 (Shiny Effect)
- 新增 UIShinyEffectComponent:UI 闪光参数配置
- 新增 UIShinyEffectSystem:材质覆盖驱动的闪光动画
- 新增 ShinyEffectComponent/System(Sprite 版本)
## 引擎层改进
### Rust 纹理管理扩展
- create_blank_texture:创建空白 GPU 纹理
- update_texture_region:局部纹理更新
- 支持动态图集的 GPU 端操作
### 材质系统
- 新增 effects/ 目录:ShinyEffect 等效果实现
- 新增 interfaces/ 目录:IMaterial 等接口定义
- 新增 mixins/ 目录:可组合的材质功能
### EngineBridge 扩展
- 新增 createBlankTexture/updateTextureRegion 方法
- 改进纹理加载回调机制
## UI 渲染改进
- UIRenderCollector:支持合批调试信息
- 稳定排序:addIndex 保证渲染顺序一致性
- 九宫格渲染优化
- 材质覆盖支持
## 其他改进
- 国际化:新增 Frame Debugger 相关翻译
- 编辑器:新增渲染调试入口
- 文档:新增架构设计文档目录
* refactor(ui): 引入新基础组件架构与渲染工具函数
Phase 1 重构 - 组件职责分离与代码复用:
新增基础组件层:
- UIGraphicComponent: 所有可视 UI 元素的基类(颜色、透明度、raycast)
- UIImageComponent: 纹理显示组件(支持简单、切片、平铺、填充模式)
- UISelectableComponent: 可交互元素的基类(状态管理、颜色过渡)
新增渲染工具:
- UIRenderUtils: 提取共享的坐标计算、边框渲染、阴影渲染等工具函数
- getUIRenderTransform: 统一的变换数据提取
- renderBorder/renderShadow: 复用的边框和阴影渲染逻辑
新增渲染系统:
- UIGraphicRenderSystem: 处理新基础组件的统一渲染器
重构现有系统:
- UIRectRenderSystem: 使用新工具函数,移除重复代码
- UIButtonRenderSystem: 使用新工具函数,移除重复代码
这些改动为后续统一渲染系统奠定基础。
* refactor(ui): UIProgressBarRenderSystem 使用渲染工具函数
- 使用 getUIRenderTransform 替代手动变换计算
- 使用 renderBorder 工具函数替代重复的边框渲染
- 使用 lerpColor 工具函数替代重复的颜色插值
- 简化方法签名,使用 UIRenderTransform 类型
- 移除约 135 行重复代码
* refactor(ui): Slider 和 ScrollView 渲染系统使用工具函数
- UISliderRenderSystem: 使用 getUIRenderTransform,简化方法签名
- UIScrollViewRenderSystem: 使用 getUIRenderTransform,简化方法签名
- 统一使用 UIRenderTransform 类型减少参数传递
- 消除重复的变换计算代码
* refactor(ui): 使用 UIWidgetMarker 消除硬编码组件依赖
- 新增 UIWidgetMarker 标记组件
- UIRectRenderSystem 改为检查标记而非硬编码4种组件类型
- 各 Widget 渲染系统自动添加标记组件
- 减少模块间耦合,提高可扩展性
* feat(ui): 实现 Canvas 隔离机制
- 新增 UICanvasComponent 定义 Canvas 渲染组
- UITransformComponent 添加 Canvas 相关字段:canvasEntityId, worldSortingLayer, pixelPerfect
- UILayoutSystem 传播 Canvas 设置给子元素
- UIRenderUtils 使用 Canvas 继承的排序层
- 支持嵌套 Canvas 和不同渲染模式
* refactor(ui): 统一纹理管理工具函数
Phase 4: 纹理管理统一
新增:
- UITextureUtils.ts: 统一的纹理描述符接口和验证函数
- UITextureDescriptor: 支持 GUID/textureId/path 多种纹理源
- isValidTextureGuid: GUID 验证
- getTextureKey: 获取用于合批的纹理键
- normalizeTextureDescriptor: 规范化各种输入格式
- utils/index.ts: 工具函数导出
修改:
- UIGraphicRenderSystem: 使用新的纹理工具函数
- index.ts: 导出纹理工具类型和函数
* refactor(ui): 实现统一的脏标记机制
Phase 5: Dirty 标记机制
新增:
- UIDirtyFlags.ts: 位标记枚举和追踪工具
- UIDirtyFlags: Visual/Layout/Transform/Material/Text 标记
- IDirtyTrackable: 脏追踪接口
- DirtyTracker: 辅助工具类
- 帧级别脏状态追踪 (markFrameDirty, isFrameDirty)
修改:
- UIGraphicComponent: 实现 IDirtyTrackable
- 属性 setter 自动设置脏标记
- 保留 setDirty/clearDirty 向后兼容
- UIImageComponent: 所有属性支持脏追踪
- textureGuid/imageType/fillAmount 等变化自动标记
- UIGraphicRenderSystem: 使用 clearDirtyFlags()
导出:
- UIDirtyFlags, IDirtyTrackable, DirtyTracker
- markFrameDirty, isFrameDirty, clearFrameDirty
* refactor(ui): 移除过时的 dirty flag API
移除 UIGraphicComponent 中的兼容性 API:
- 移除 _isDirty getter/setter
- 移除 setDirty() 方法
- 移除 clearDirty() 方法
现在统一使用新的 dirty flag 系统:
- isDirty() / hasDirtyFlag(flags)
- markDirty(flags) / clearDirtyFlags()
* fix(ui): 修复两个 TODO 功能
1. 滑块手柄命中测试 (UIInputSystem)
- UISliderComponent 添加 getHandleBounds() 计算手柄边界
- UISliderComponent 添加 isPointInHandle() 精确命中测试
- UIInputSystem.handleSlider() 使用精确测试更新悬停状态
2. 径向填充渲染 (UIGraphicRenderSystem)
- 实现 renderRadialFill() 方法
- 支持 radial90/radial180/radial360 三种模式
- 支持 fillOrigin (top/right/bottom/left) 和 fillClockwise
- 使用多段矩形近似饼形填充效果
* feat(ui): 完善 UI 系统架构和九宫格渲染
* fix(ui): 修复文本渲染层级问题并清理调试代码
- 修复纹理就绪后调用 invalidateUIRenderCaches() 导致的无限循环
- 移除 UITextRenderSystem、UIButtonRenderSystem、UIRectRenderSystem 中的首帧调试输出
- 移除 UILayoutSystem 中的布局调试日志
- 清理所有 __UI_RENDER_DEBUG__ 条件日志
* refactor(ui): 优化渲染批处理和输入框组件
渲染系统:
- 修复 RenderBatcher 保持渲染顺序
- 优化 Rust SpriteBatch 避免合并非连续精灵
- 增强 EngineRenderSystem 纹理就绪检测
输入框组件:
- 增强 UIInputFieldComponent 功能
- 改进 UIInputSystem 输入处理
- 新增 TextMeasureService 文本测量服务
* fix(ui): 修复九宫格首帧渲染和InputField输入问题
- 修复九宫格首帧 size=0x0 问题:
- Viewport.tsx: 预览模式读取图片尺寸存储到 importSettings
- AssetDatabase: ISpriteSettings 添加 width/height 字段
- AssetMetadataService: getTextureSpriteInfo 使用元数据尺寸作为后备
- UIRectRenderSystem: 当 atlasEntry 不存在时使用 spriteInfo 尺寸
- WebBuildPipeline: 构建时包含 importSettings
- AssetManager: 从 catalog 初始化时复制 importSettings
- AssetTypes: IAssetCatalogEntry 添加 importSettings 字段
- 修复 InputField 无法输入问题:
- UIRuntimeModule: manifest 添加 pluginExport: 'UIPlugin'
- 确保预览模式正确加载 UI 插件并绑定 UIInputSystem
- 添加调试日志用于排查纹理加载问题
* fix(sprite): 修复类型导出错误
MaterialPropertyOverride 和 MaterialOverrides 应从 @esengine/material-system 导出
* fix(ui-editor): 补充 AnchorPreset 拉伸预设的映射
添加 StretchTop, StretchMiddle, StretchBottom, StretchLeft, StretchCenter, StretchRight 的位置和锚点值映射
2025-12-19 15:33:36 +08:00
YHH
ed8f6e283b
feat: 纹理路径稳定 ID 与架构改进 ( #305 )
...
* feat(asset-system): 实现路径稳定 ID 生成器
使用 FNV-1a hash 算法为纹理生成稳定的运行时 ID:
- 新增 _pathIdCache 静态缓存,跨 Play/Stop 循环保持稳定
- 新增 getStableIdForPath() 方法,相同路径永远返回相同 ID
- 修改 loadTextureForComponent/loadTextureByGuid 使用稳定 ID
- clearTextureMappings() 不再清除 _pathIdCache
这解决了 Play/Stop 后纹理 ID 失效的根本问题。
* fix(runtime-core): 移除 Play/Stop 循环中的 clearTextureMappings 调用
使用路径稳定 ID 后,不再需要在快照保存/恢复时清除纹理缓存:
- saveSceneSnapshot() 移除 clearTextureMappings() 调用
- restoreSceneSnapshot() 移除 clearTextureMappings() 调用
- 组件保存的 textureId 在 Play/Stop 后仍然有效
* fix(editor-core): 修复场景切换时的资源泄漏
在 openScene() 加载新场景前先卸载旧场景资源:
- 调用 sceneResourceManager.unloadSceneResources() 释放旧资源
- 使用引用计数机制,仅卸载不再被引用的资源
- 路径稳定 ID 缓存不受影响,保持 ID 稳定性
* fix(runtime-core): 修复 PluginManager 组件注册类型错误
将 ComponentRegistry 类改为 GlobalComponentRegistry 实例:
- registerComponents() 期望 IComponentRegistry 接口实例
- GlobalComponentRegistry 是 ComponentRegistry 的全局实例
* refactor(core): 提取 IComponentRegistry 接口
将组件注册表抽象为接口,支持场景级组件注册:
- 新增 IComponentRegistry 接口定义
- Scene 持有独立的 componentRegistry 实例
- 支持从 GlobalComponentRegistry 克隆
- 各系统支持传入自定义注册表
* refactor(engine-core): 改进插件服务注册机制
- 更新 IComponentRegistry 类型引用
- 优化 PluginServiceRegistry 服务管理
* refactor(modules): 适配新的组件注册接口
更新各模块 RuntimeModule 使用 IComponentRegistry 接口:
- audio, behavior-tree, camera
- sprite, tilemap, world-streaming
* fix(physics-rapier2d): 修复物理插件组件注册
- PhysicsEditorPlugin 添加 runtimeModule 引用
- 适配 IComponentRegistry 接口
- 修复物理组件在场景加载时未注册的问题
* feat(editor-core): 添加 UserCodeService 就绪信号机制
- 新增 waitForReady()/signalReady() API
- 支持等待用户脚本编译完成
- 解决场景加载时组件未注册的时序问题
* fix(editor-app): 在编译完成后调用 signalReady()
确保用户脚本编译完成后发出就绪信号:
- 编译成功后调用 userCodeService.signalReady()
- 编译失败也要发出信号,避免阻塞场景加载
* feat(editor-core): 改进编辑器核心服务
- EntityStoreService 添加调试日志
- AssetRegistryService 优化资产注册
- PluginManager 改进插件管理
- IFileAPI 添加 getFileMtime 接口
* feat(engine): 改进 Rust 纹理管理器
- 支持任意 ID 的纹理加载(非递增)
- 添加纹理状态追踪 API
- 优化纹理缓存清理机制
- 更新 TypeScript 绑定
* feat(ui): 添加场景切换和文本闪烁组件
新增组件:
- SceneLoadTriggerComponent: 场景切换触发器
- TextBlinkComponent: 文本闪烁效果
新增系统:
- SceneLoadTriggerSystem: 处理场景切换逻辑
- TextBlinkSystem: 处理文本闪烁动画
其他改进:
- UIRuntimeModule 适配新组件注册接口
- UI 渲染系统优化
* feat(editor-app): 添加外部文件修改检测
- 新增 ExternalModificationDialog 组件
- TauriFileAPI 支持 getFileMtime
- 场景文件被外部修改时提示用户
* feat(editor-app): 添加渲染调试面板
- 新增 RenderDebugService 和调试面板 UI
- App/ContentBrowser 添加调试日志
- TitleBar/Viewport 优化
- DialogManager 改进
* refactor(editor-app): 编辑器服务和组件优化
- EngineService 改进引擎集成
- EditorEngineSync 同步优化
- AssetFileInspector 改进
- VectorFieldEditors 优化
- InstantiatePrefabCommand 改进
* feat(i18n): 更新国际化翻译
- 添加新功能相关翻译
- 更新中文、英文、西班牙文
* feat(tauri): 添加文件修改时间查询命令
- 新增 get_file_mtime 命令
- 支持检测文件外部修改
* refactor(particle): 粒子系统改进
- 适配新的组件注册接口
- ParticleSystem 优化
- 添加单元测试
* refactor(platform): 平台适配层优化
- BrowserRuntime 改进
- 新增 RuntimeSceneManager 服务
- 导出优化
* refactor(asset-system-editor): 资产元数据改进
- AssetMetaFile 优化
- 导出调整
* fix(asset-system): 移除未使用的 TextureLoader 导入
* fix(tests): 更新测试以使用 GlobalComponentRegistry 实例
修复多个测试文件以适配 ComponentRegistry 从静态类变为实例类的变更:
- ComponentStorage.test.ts: 使用 GlobalComponentRegistry.reset()
- EntitySerializer.test.ts: 使用 GlobalComponentRegistry 实例
- IncrementalSerialization.test.ts: 使用 GlobalComponentRegistry 实例
- SceneSerializer.test.ts: 使用 GlobalComponentRegistry 实例
- ComponentRegistry.extended.test.ts: 使用 GlobalComponentRegistry,同时注册到 scene.componentRegistry
- SystemTypes.test.ts: 在 Scene 创建前注册组件
- QuerySystem.test.ts: mockScene 添加 componentRegistry
2025-12-16 12:46:14 +08:00
YHH
beaa1d09de
feat: 预制体系统与架构改进 ( #303 )
...
* feat(prefab): 实现预制体系统和编辑器 UX 改进
## 预制体系统
- 新增 PrefabSerializer: 预制体序列化/反序列化
- 新增 PrefabInstanceComponent: 追踪预制体实例来源和修改
- 新增 PrefabService: 预制体核心服务
- 新增 PrefabLoader: 预制体资产加载器
- 新增预制体命令: Create/Instantiate/Apply/Revert/BreakLink
## 预制体编辑模式
- 支持双击 .prefab 文件进入编辑模式
- 预制体编辑模式工具栏 (保存/退出)
- 预制体实例指示器和操作菜单
## 编辑器 UX 改进
- SceneHierarchy 快捷键: F2 重命名, Ctrl+D 复制, ↑↓ 导航
- 支持双击实体名称内联编辑
- 删除实体时显示子节点数量警告
- 右键菜单添加重命名/复制选项及快捷键提示
- 布局持久化和重置功能
## Bug 修复
- 修复 editor-runtime 组件类重复导致的 TransformComponent 不识别问题
- 修复 .prefab-name 样式覆盖导致预制体工具栏文字不可见
- 修复 Inspector 资源字段高度不正确问题
* feat(editor): 改进编辑器 UX 交互体验
- ContentBrowser: 加载动画 spinner、搜索高亮、改进空状态设计
- SceneHierarchy: 选中项自动滚动到视图、搜索清除按钮
- PropertyInspector: 输入框本地状态管理、Enter/Escape 键处理
- EntityInspector: 组件折叠状态持久化、属性搜索清除按钮
- Viewport: 变换操作实时数值显示
- 国际化: 添加相关文本 (en/zh)
* fix(build): 修复 Web 构建资产加载和编辑器 UX 改进
构建系统修复:
- 修复 asset-catalog.json 字段名不匹配 (entries vs assets)
- 修复 BrowserFileSystemService 支持两种目录格式
- 修复 bundle 策略检测逻辑 (空对象判断)
- 修复 module.json 中 assetExtensions 声明和类型推断
行为树修复:
- 修复 BehaviorTreeExecutionSystem 使用 loadAsset 替代 loadAssetByPath
- 修复 BehaviorTreeAssetType 常量与 module.json 类型名一致 (behavior-tree)
编辑器 UX 改进:
- 构建完成对话框添加"打开文件夹"按钮
- 构建完成对话框样式优化 (圆形图标背景、按钮布局)
- SceneHierarchy 响应式布局 (窄窗口自动隐藏 Type 列)
- SceneHierarchy 隐藏滚动条
错误追踪:
- 添加全局错误处理器写入日志文件 (%TEMP%/esengine-editor-crash.log)
- 添加 append_to_log Tauri 命令
* feat(render): 修复 UI 渲染和点击特效系统
## UI 渲染修复
- 修复 GUID 验证 bug,使用统一的 isValidGUID() 函数
- 修复 UI 渲染顺序随机问题,Rust 端使用 IndexMap 替代 HashMap
- Web 运行时添加 assetPathResolver 支持 GUID 解析
- UIInteractableComponent.blockEvents 默认值改为 false
## 点击特效系统
- 新增 ClickFxComponent 和 ClickFxSystem
- 支持在点击位置播放粒子效果
- 支持多种触发模式和粒子轮换
## Camera 系统重构
- CameraSystem 从 ecs-engine-bindgen 移至 camera 包
- 新增 CameraManager 统一管理相机
## 编辑器改进
- 改进属性面板 UI 交互
- 粒子编辑器面板优化
- Transform 命令系统
* feat(render): 实现 Sorting Layer 系统和 Overlay 渲染层
- 新增 SortingLayerManager 管理排序层级 (Background, Default, Foreground, UI, Overlay)
- 实现 ISortable 接口,统一 Sprite、UI、Particle 的排序属性
- 修复粒子 Overlay 层被 UI 遮挡问题:添加独立的 Overlay Pass 在 UI 之后渲染
- 更新粒子资产格式:从 sortingOrder 改为 sortingLayer + orderInLayer
- 更新粒子编辑器面板支持新的排序属性
- 优化 UI 渲染系统使用新的排序层级
* feat(ci): 集成 SignPath 代码签名服务
- 添加 SignPath 自动签名工作流(Windows)
- 配置 release-editor.yml 支持代码签名
- 将构建改为草稿模式,等待签名完成后发布
- 添加证书文件到 .gitignore 防止泄露
* fix(asset): 修复 Web 构建资产路径解析和全局单例移除
## 资产路径修复
- 修复 Tauri 本地服务器 `/asset?path=...` 路径解析,正确与 root 目录连接
- BrowserPathResolver 支持两种模式:
- 'proxy': 使用 /asset?path=... 格式(编辑器 Run in Browser)
- 'direct': 使用直接路径 /assets/path.png(独立 Web 构建)
- BrowserRuntime 使用 'direct' 模式,无需 Tauri 代理
## 架构改进 - 移除全局单例
- 移除 globalAssetManager 导出,改用 AssetManagerToken 依赖注入
- 移除 globalPathResolver 导出,改用 PathResolutionService
- 移除 globalPathResolutionService 导出
- ParticleUpdateSystem/ClickFxSystem 通过 setAssetManager() 注入依赖
- EngineService 使用 new AssetManager() 替代全局实例
## 新增服务
- PathResolutionService: 统一路径解析接口
- RuntimeModeService: 运行时模式查询服务
- SerializationContext: EntityRef 序列化上下文
## 其他改进
- 完善 ServiceToken 注释说明本地定义的意图
- 导出 BrowserPathResolveMode 类型
* fix(build): 添加 world-streaming composite 设置修复类型检查
* fix(build): 移除 world-streaming 引用避免 composite 冲突
* fix(build): 将 const enum 改为 enum 兼容 isolatedModules
* fix(build): 添加缺失的 IAssetManager 导入
2025-12-13 19:44:08 +08:00
yhh
240b165970
chore: 更新仓库 URL (ecs-framework → esengine)
...
仓库已从 esengine/ecs-framework 重命名为 esengine/esengine
更新所有引用旧 URL 的文件
2025-12-08 21:23:37 +08:00
YHH
d7454e3ca4
feat(engine): 添加编辑器模式标志控制编辑器UI显示 ( #274 )
...
* feat(engine): 添加编辑器模式标志控制编辑器UI显示
- 在 Rust 引擎中添加 isEditor 标志,控制网格、gizmos、坐标轴指示器的显示
- 运行时模式下自动隐藏所有编辑器专用 UI
- 编辑器预览和浏览器运行时通过 setEditorMode(false) 禁用编辑器 UI
- 添加 Scene.isEditorMode 延迟组件生命周期回调,直到 begin() 调用
- 修复用户组件注册到 Core ComponentRegistry 以支持序列化
- 修复 Run in Browser 时用户组件加载问题
* fix: 复制引擎模块的类型定义文件到 dist/engine
* fix: 修复用户项目 tsconfig paths 类型定义路径
- 从 module.json 读取实际包名而不是使用目录名
- 修复 .d.ts 文件复制逻辑,支持 .mjs 扩展名
2025-12-04 22:43:26 +08:00
YHH
63f006ab62
feat: 添加跨平台运行时、资产系统和UI适配功能 ( #256 )
...
* feat(platform-common): 添加WASM加载器和环境检测API
* feat(rapier2d): 新增Rapier2D WASM绑定包
* feat(physics-rapier2d): 添加跨平台WASM加载器
* feat(asset-system): 添加运行时资产目录和bundle格式
* feat(asset-system-editor): 新增编辑器资产管理包
* feat(editor-core): 添加构建系统和模块管理
* feat(editor-app): 重构浏览器预览使用import maps
* feat(platform-web): 添加BrowserRuntime和资产读取
* feat(engine): 添加材质系统和着色器管理
* feat(material): 新增材质系统和着色器编辑器
* feat(tilemap): 增强tilemap编辑器和动画系统
* feat(modules): 添加module.json配置
* feat(core): 添加module.json和类型定义更新
* chore: 更新依赖和构建配置
* refactor(plugins): 更新插件模板使用ModuleManifest
* chore: 添加第三方依赖库
* chore: 移除BehaviourTree-ai和ecs-astar子模块
* docs: 更新README和文档主题样式
* fix: 修复Rust文档测试和添加rapier2d WASM绑定
* fix(tilemap-editor): 修复画布高DPI屏幕分辨率适配问题
* feat(ui): 添加UI屏幕适配系统(CanvasScaler/SafeArea)
* fix(ecs-engine-bindgen): 添加缺失的ecs-framework-math依赖
* fix: 添加缺失的包依赖修复CI构建
* fix: 修复CodeQL检测到的代码问题
* fix: 修复构建错误和缺失依赖
* fix: 修复类型检查错误
* fix(material-system): 修复tsconfig配置支持TypeScript项目引用
* fix(editor-core): 修复Rollup构建配置添加tauri external
* fix: 修复CodeQL检测到的代码问题
* fix: 修复CodeQL检测到的代码问题
2025-12-03 22:15:22 +08:00
YHH
359886c72f
Feature/physics and tilemap enhancement ( #247 )
...
* feat(behavior-tree,tilemap): 修复编辑器连线缩放问题并增强插件系统
* feat(node-editor,blueprint): 新增通用节点编辑器和蓝图可视化脚本系统
* feat(editor,tilemap): 优化编辑器UI样式和Tilemap编辑器功能
* fix: 修复CodeQL安全警告和CI类型检查错误
* fix: 修复CodeQL安全警告和CI类型检查错误
* fix: 修复CodeQL安全警告和CI类型检查错误
2025-11-29 23:00:48 +08:00
YHH
107439d70c
Feature/runtime cdn and plugin loader ( #240 )
...
* feat(ui): 完善 UI 布局系统和编辑器可视化工具
* refactor: 移除 ModuleRegistry,统一使用 PluginManager 插件系统
* fix: 修复 CodeQL 警告并提升测试覆盖率
* refactor: 分离运行时入口点,解决 runtime bundle 包含 React 的问题
* fix(ci): 添加 editor-core 和 editor-runtime 到 CI 依赖构建步骤
* docs: 完善 ServiceContainer 文档,新增 Symbol.for 模式和 @InjectProperty 说明
* fix(ci): 修复 type-check 失败问题
* fix(ci): 修复类型检查失败问题
* fix(ci): 修复类型检查失败问题
* fix(ci): behavior-tree 构建添加 @tauri-apps 外部依赖
* fix(ci): behavior-tree 添加 @tauri-apps/plugin-fs 类型依赖
* fix(ci): platform-web 添加缺失的 behavior-tree 依赖
* fix(lint): 移除正则表达式中不必要的转义字符
2025-11-27 20:42:46 +08:00
YHH
3fb6f919f8
Feature/tilemap editor ( #237 )
...
* feat: 添加 Tilemap 编辑器插件和组件生命周期支持
* feat(editor-core): 添加声明式插件注册 API
* feat(editor-core): 改进tiledmap结构合并tileset进tiledmapeditor
* feat: 添加 editor-runtime SDK 和插件系统改进
* fix(ci): 修复SceneResourceManager里变量未使用问题
2025-11-25 22:23:19 +08:00
YHH
a3f7cc38b1
Feature/render pipeline ( #232 )
...
* refactor(engine): 重构2D渲染管线坐标系统
* feat(engine): 完善2D渲染管线和编辑器视口功能
* feat(editor): 实现Viewport变换工具系统
* feat(editor): 优化Inspector渲染性能并修复Gizmo变换工具显示
* feat(editor): 实现Run on Device移动预览功能
* feat(editor): 添加组件属性控制和依赖关系系统
* feat(editor): 实现动画预览功能和优化SpriteAnimator编辑器
* feat(editor): 修复SpriteAnimator动画预览功能并迁移CI到pnpm
* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm
* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm
* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm
* feat(editor): 修复SpriteAnimator动画预览并迁移到pnpm
* feat(ci): 迁移项目到pnpm并修复CI构建问题
* chore: 迁移CI工作流到pnpm并添加WASM构建支持
* chore: 迁移CI工作流到pnpm并添加WASM构建支持
* chore: 迁移CI工作流到pnpm并添加WASM构建支持
* chore: 迁移CI工作流到pnpm并添加WASM构建支持
* chore: 迁移CI工作流到pnpm并添加WASM构建支持
* chore: 迁移CI工作流到pnpm并添加WASM构建支持
* chore: 移除 network 相关包
* chore: 移除 network 相关包
2025-11-23 14:49:37 +08:00
YHH
a768b890fd
feat: 集成Rust WASM渲染引擎与TypeScript ECS框架 ( #228 )
...
* feat: 集成Rust WASM渲染引擎与TypeScript ECS框架
* feat: 增强编辑器UI功能与跨平台支持
* fix: 修复CI测试和类型检查问题
* fix: 修复CI问题并提高测试覆盖率
* fix: 修复CI问题并提高测试覆盖率
2025-11-21 10:03:18 +08:00