* feat(editor-core): 添加用户系统自动注册功能 - IUserCodeService 新增 registerSystems/unregisterSystems/getRegisteredSystems 方法 - UserCodeService 实现系统检测、实例化和场景注册逻辑 - ServiceRegistry 在预览开始时注册用户系统,停止时移除 - 热更新时自动重新加载用户系统 - 更新 System 脚本模板添加 @ECSSystem 装饰器 * feat(editor-core): 添加编辑器脚本支持(Inspector/Gizmo) - registerEditorExtensions 实际注册用户 Inspector 和 Gizmo - 添加 unregisterEditorExtensions 方法 - ServiceRegistry 在项目加载时编译并加载编辑器脚本 - 项目关闭时自动清理编辑器扩展 - 添加 Inspector 和 Gizmo 脚本创建模板 * feat(particle): 添加粒子系统和粒子编辑器 新增两个包: - @esengine/particle: 粒子系统核心库 - @esengine/particle-editor: 粒子编辑器 UI 粒子系统功能: - ECS 组件架构,支持播放/暂停/重置控制 - 7种发射形状:点、圆、环、矩形、边缘、线、锥形 - 5个动画模块:颜色渐变、缩放曲线、速度控制、旋转、噪声 - 纹理动画模块支持精灵表动画 - 3种混合模式:Normal、Additive、Multiply - 11个内置预设:火焰、烟雾、爆炸、雨、雪等 - 对象池优化,支持粒子复用 编辑器功能: - 实时 Canvas 预览,支持全屏和鼠标跟随 - 点击触发爆发效果(用于测试爆炸类特效) - 渐变编辑器:可视化颜色关键帧编辑 - 曲线编辑器:支持缩放曲线和缓动函数 - 预设浏览器:快速应用内置预设 - 模块开关:独立启用/禁用各个模块 - Vector2 样式输入(重力 X/Y) * feat(particle): 完善粒子系统核心功能 1. Burst 定时爆发系统 - BurstConfig 接口支持时间、数量、循环次数、间隔 - 运行时自动处理定时爆发 - 支持无限循环爆发 2. 速度曲线模块 (VelocityOverLifetimeModule) - 6种曲线类型:Constant、Linear、EaseIn、EaseOut、EaseInOut、Custom - 自定义关键帧曲线支持 - 附加速度 X/Y - 轨道速度和径向速度 3. 碰撞边界模块 (CollisionModule) - 矩形和圆形边界类型 - 3种碰撞行为:Kill、Bounce、Wrap - 反弹系数和最小速度阈值 - 反弹时生命损失 * feat(particle): 添加力场模块、碰撞模块和世界/本地空间支持 - 新增 ForceFieldModule 支持风力、吸引点、漩涡、湍流四种力场类型 - 新增 SimulationSpace 枚举支持世界空间和本地空间切换 - ParticleSystemComponent 集成力场模块和空间模式 - 粒子编辑器添加 Collision 和 ForceField 模块的 UI 编辑支持 - 新增 Vortex、Leaves、Bouncing 三个预设展示新功能 - 编辑器预览实现完整的碰撞和力场效果 * fix(particle): 移除未使用的 transform 循环变量
ESEngine
English | 中文
Documentation | API Reference | Examples
ESEngine is a cross-platform 2D game engine for creating games from a unified interface. It provides a comprehensive set of common tools so that developers can focus on making games without having to reinvent the wheel.
Games can be exported to multiple platforms including Web browsers, WeChat Mini Games, and other mini-game platforms.
Free and Open Source
ESEngine is completely free and open source under the MIT license. No strings attached, no royalties. Your games are yours.
Features
- Data-Driven Architecture: Built on Entity-Component-System (ECS) pattern for flexible and performant game logic
- High-Performance Rendering: Rust/WebAssembly 2D renderer with sprite batching and WebGL 2.0 backend
- Visual Editor: Cross-platform desktop editor with scene management, asset browser, and visual tools
- Modular Design: Use only what you need. Each feature is a separate module that can be included independently
- Multi-Platform: Deploy to Web, WeChat Mini Games, and more from a single codebase
Getting the Engine
Using npm
npm install @esengine/ecs-framework
Building from Source
See Building from Source for detailed instructions.
Editor Download
Pre-built editor binaries are available on the Releases page for Windows and macOS.
Quick Start
import {
Core, Scene, Entity, Component, EntitySystem,
Matcher, Time, ECSComponent, ECSSystem
} from '@esengine/ecs-framework';
@ECSComponent('Position')
class Position extends Component {
x = 0;
y = 0;
}
@ECSComponent('Velocity')
class Velocity extends Component {
dx = 0;
dy = 0;
}
@ECSSystem('Movement')
class MovementSystem extends EntitySystem {
constructor() {
super(Matcher.all(Position, Velocity));
}
protected process(entities: readonly Entity[]): void {
for (const entity of entities) {
const pos = entity.getComponent(Position);
const vel = entity.getComponent(Velocity);
pos.x += vel.dx * Time.deltaTime;
pos.y += vel.dy * Time.deltaTime;
}
}
}
Core.create();
const scene = new Scene();
scene.addSystem(new MovementSystem());
const player = scene.createEntity('Player');
player.addComponent(new Position());
player.addComponent(new Velocity());
Core.setScene(scene);
// Game loop
let lastTime = 0;
function gameLoop(currentTime: number) {
const deltaTime = (currentTime - lastTime) / 1000;
lastTime = currentTime;
Core.update(deltaTime);
requestAnimationFrame(gameLoop);
}
requestAnimationFrame(gameLoop);
Modules
ESEngine is organized into modular packages. Each feature has a runtime module and an optional editor extension.
Core
| Package | Description |
|---|---|
@esengine/ecs-framework |
Core ECS framework with entity management, component system, and queries |
@esengine/math |
Vector, matrix, and mathematical utilities |
@esengine/engine |
Rust/WASM 2D renderer |
@esengine/engine-core |
Engine module system and lifecycle management |
Runtime Modules
| Package | Description |
|---|---|
@esengine/sprite |
2D sprite rendering and animation |
@esengine/tilemap |
Tile-based map rendering with animation support |
@esengine/physics-rapier2d |
2D physics simulation powered by Rapier |
@esengine/behavior-tree |
Behavior tree AI system |
@esengine/blueprint |
Visual scripting runtime |
@esengine/camera |
Camera control and management |
@esengine/audio |
Audio playback |
@esengine/ui |
UI components |
@esengine/material-system |
Material and shader system |
@esengine/asset-system |
Asset loading and management |
Editor Extensions
| Package | Description |
|---|---|
@esengine/sprite-editor |
Sprite inspector and tools |
@esengine/tilemap-editor |
Visual tilemap editor with brush tools |
@esengine/physics-rapier2d-editor |
Physics collider visualization and editing |
@esengine/behavior-tree-editor |
Visual behavior tree editor |
@esengine/blueprint-editor |
Visual scripting editor |
@esengine/material-editor |
Material and shader editor |
@esengine/shader-editor |
Shader code editor |
Platform
| Package | Description |
|---|---|
@esengine/platform-common |
Platform abstraction interfaces |
@esengine/platform-web |
Web browser runtime |
@esengine/platform-wechat |
WeChat Mini Game runtime |
Editor
ESEngine Editor is a cross-platform desktop application built with Tauri and React.
Features
- Scene hierarchy and entity management
- Component inspector with custom editors
- Asset browser with drag-and-drop support
- Tilemap editor with paint, fill, and selection tools
- Behavior tree visual editor
- Blueprint visual scripting
- Material and shader editing
- Built-in performance profiler
- Localization support (English, Chinese)
Screenshot
Supported Platforms
| Platform | Runtime | Editor |
|---|---|---|
| Web Browser | Yes | - |
| Windows | - | Yes |
| macOS | - | Yes |
| WeChat Mini Game | In Progress | - |
| Playable Ads | Planned | - |
| Android | Planned | - |
| iOS | Planned | - |
| Windows Native | Planned | - |
| Other Platforms | Planned | - |
Building from Source
Prerequisites
- Node.js 18 or later
- pnpm 10 or later
- Rust toolchain (for WASM renderer)
- wasm-pack
Setup
# Clone repository
git clone https://github.com/esengine/ecs-framework.git
cd ecs-framework
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Build WASM renderer (optional)
pnpm build:wasm
Running the Editor
cd packages/editor-app
pnpm tauri:dev
Project Structure
ecs-framework/
├── packages/ Engine packages (runtime, editor, platform)
├── docs/ Documentation source
├── examples/ Example projects
├── scripts/ Build utilities
└── thirdparty/ Third-party dependencies
Documentation
Community
- GitHub Issues - Bug reports and feature requests
- GitHub Discussions - Questions and ideas
Contributing
Contributions are welcome. Please read the contributing guidelines before submitting a pull request.
- Fork the repository
- Create a feature branch
- Make changes with tests
- Submit a pull request
License
ESEngine is licensed under the MIT License.
