# ESEngine

[English](./README.md) | **中文**

**[文档](https://esengine.github.io/ecs-framework/) | [API 参考](https://esengine.github.io/ecs-framework/api/) | [示例](./examples/)**

ESEngine 是一个跨平台 2D 游戏引擎，提供统一的开发界面。它包含完整的常用工具集，让开发者专注于游戏创作本身。

游戏可以导出到多个平台，包括 Web 浏览器、微信小游戏等小游戏平台。

## 免费开源

ESEngine 基于 MIT 协议完全免费开源。无附加条件，无版税。你的游戏完全属于你。

## 特性

- **数据驱动架构**：基于 ECS（实体-组件-系统）模式构建，提供灵活高效的游戏逻辑
- **高性能渲染**：Rust/WebAssembly 2D 渲染器，支持精灵批处理和 WebGL 2.0
- **可视化编辑器**：跨平台桌面编辑器，包含场景管理、资源浏览器和可视化工具
- **模块化设计**：按需使用，每个功能都是独立模块，可单独引入
- **多平台支持**：一套代码部署到 Web、微信小游戏等多个平台

## 获取引擎

### 通过 npm 安装

```bash
npm install @esengine/ecs-framework
```

### 从源码构建

详见 [从源码构建](#从源码构建) 章节。

### 编辑器下载

预编译的编辑器可在 [Releases](https://github.com/esengine/ecs-framework/releases) 页面下载，支持 Windows 和 macOS。

## 快速开始

```typescript
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);

// 游戏循环
let lastTime = 0;
function gameLoop(currentTime: number) {
    const deltaTime = (currentTime - lastTime) / 1000;
    lastTime = currentTime;

    Core.update(deltaTime);
    requestAnimationFrame(gameLoop);
}
requestAnimationFrame(gameLoop);
```

## 模块

ESEngine 采用模块化组织。每个功能都有运行时模块和可选的编辑器扩展。

### 核心

| 包名 | 描述 |
|------|------|
| `@esengine/ecs-framework` | ECS 框架核心，包含实体管理、组件系统和查询 |
| `@esengine/math` | 向量、矩阵和数学工具 |
| `@esengine/engine` | Rust/WASM 2D 渲染器 |
| `@esengine/engine-core` | 引擎模块系统和生命周期管理 |

### 运行时模块

| 包名 | 描述 |
|------|------|
| `@esengine/sprite` | 2D 精灵渲染和动画 |
| `@esengine/tilemap` | Tilemap 渲染，支持动画 |
| `@esengine/physics-rapier2d` | 基于 Rapier 的 2D 物理模拟 |
| `@esengine/behavior-tree` | 行为树 AI 系统 |
| `@esengine/blueprint` | 可视化脚本运行时 |
| `@esengine/camera` | 相机控制和管理 |
| `@esengine/audio` | 音频播放 |
| `@esengine/ui` | UI 组件 |
| `@esengine/material-system` | 材质和着色器系统 |
| `@esengine/asset-system` | 资源加载和管理 |

### 编辑器扩展

| 包名 | 描述 |
|------|------|
| `@esengine/sprite-editor` | 精灵检视器和工具 |
| `@esengine/tilemap-editor` | 可视化 Tilemap 编辑器，支持笔刷工具 |
| `@esengine/physics-rapier2d-editor` | 物理碰撞体可视化和编辑 |
| `@esengine/behavior-tree-editor` | 可视化行为树编辑器 |
| `@esengine/blueprint-editor` | 可视化脚本编辑器 |
| `@esengine/material-editor` | 材质和着色器编辑器 |
| `@esengine/shader-editor` | 着色器代码编辑器 |

### 平台

| 包名 | 描述 |
|------|------|
| `@esengine/platform-common` | 平台抽象接口 |
| `@esengine/platform-web` | Web 浏览器运行时 |
| `@esengine/platform-wechat` | 微信小游戏运行时 |

## 编辑器

ESEngine 编辑器是基于 Tauri 和 React 构建的跨平台桌面应用。

### 功能

- 场景层级和实体管理
- 组件检视器，支持自定义编辑器
- 资源浏览器，支持拖放
- Tilemap 编辑器，支持绘制、填充、选择工具
- 行为树可视化编辑器
- 蓝图可视化脚本
- 材质和着色器编辑
- 内置性能分析器
- 多语言支持（英文、中文）

### 截图

![ESEngine Editor](screenshots/main_screetshot.png)

## 支持的平台

| 平台 | 运行时 | 编辑器 |
|------|--------|--------|
| Web 浏览器 | 支持 | - |
| Windows | - | 支持 |
| macOS | - | 支持 |
| 微信小游戏 | 开发中 | - |
| Playable 可玩广告 | 计划中 | - |
| Android | 计划中 | - |
| iOS | 计划中 | - |
| Windows 原生 | 计划中 | - |
| 其他平台 | 计划中 | - |

## 从源码构建

### 前置要求

- Node.js 18 或更高版本
- pnpm 10 或更高版本
- Rust 工具链（用于 WASM 渲染器）
- wasm-pack

### 安装

```bash
# 克隆仓库
git clone https://github.com/esengine/ecs-framework.git
cd ecs-framework

# 安装依赖
pnpm install

# 构建所有包
pnpm build

# 构建 WASM 渲染器（可选）
pnpm build:wasm
```

### 运行编辑器

```bash
cd packages/editor-app
pnpm tauri:dev
```

### 项目结构

```
ecs-framework/
├── packages/           引擎包（运行时、编辑器、平台）
├── docs/               文档源码
├── examples/           示例项目
├── scripts/            构建工具
└── thirdparty/         第三方依赖
```

## 文档

- [快速入门](https://esengine.github.io/ecs-framework/guide/getting-started.html)
- [架构指南](https://esengine.github.io/ecs-framework/guide/)
- [API 参考](https://esengine.github.io/ecs-framework/api/)

## 社区

- [GitHub Issues](https://github.com/esengine/ecs-framework/issues) - Bug 反馈和功能建议
- [GitHub Discussions](https://github.com/esengine/ecs-framework/discussions) - 问题和想法
- [QQ 交流群](https://jq.qq.com/?_wv=1027&k=29w1Nud6) - 中文社区

## 贡献

欢迎贡献代码。提交 PR 前请阅读贡献指南。

1. Fork 仓库
2. 创建功能分支
3. 修改代码并测试
4. 提交 PR

## 许可证

ESEngine 基于 [MIT 协议](LICENSE) 开源。
