YHH c2ebd387f2 refactor(core): 优化 WorkerEntitySystem 实现 (#334)
重构改进:
- 分离 PlatformWorkerPool 到独立文件
- 使用 Map 管理 Worker 任务状态,替代 (worker as any)._currentTask
- 提取通用批次分割逻辑 splitIntoBatches
- 添加 IWorkerMessageData 接口提高类型安全
- 添加 WorkerState 枚举提高可读性
- 添加规范的双语注释 (@zh/@en)
- 导出新类型 IWorkerSystemConfig 和 ProcessingMode
- 保留 WorkerSystemConfig 类型别名向后兼容

代码组织:
- 按功能分组方法 (初始化/处理/批次/结果应用等)
- 减少 any 类型使用
- 统一命名风格
2025-12-25 18:08:17 +08:00
2023-03-14 17:33:05 +08:00
2025-12-23 15:22:33 +08:00
2020-12-09 02:56:09 +00:00
2025-10-27 09:29:11 +08:00

ESEngine
ESEngine

Cross-platform 2D Game Engine

npm build license stars TypeScript

English | 中文

Documentation · API Reference · Download Editor · Examples


Just need ECS? The core ECS framework @esengine/ecs-framework can be used standalone with Cocos Creator, Laya, or any JS engine. View ECS Documentation

Overview

ESEngine is a cross-platform 2D game engine built from the ground up with modern web technologies. It provides a comprehensive toolset that enables developers to focus on creating games rather than building infrastructure.

Export your games to multiple platforms including web browsers, WeChat Mini Games, and other mini-game platforms from a single codebase.

Key Features

Feature Description
ECS Architecture Data-driven Entity-Component-System pattern for flexible and cache-friendly game logic
High-Performance Rendering Rust/WebAssembly 2D renderer with automatic sprite batching and WebGL 2.0 backend
Visual Editor Cross-platform desktop editor built with Tauri for scene management and asset workflows
Modular Design Import only what you need - each feature is a standalone package
Multi-Platform Export Deploy to Web, WeChat Mini Games, and more from one codebase
Physics Integration 2D physics powered by Rapier with editor visualization
Visual Scripting Behavior trees and blueprint system for designers

Tech Stack

  • Runtime: TypeScript, Rust, WebAssembly
  • Renderer: WebGL 2.0, WGPU (planned)
  • Editor: Tauri, React, Zustand
  • Physics: Rapier2D
  • Build: pnpm, Turborepo, Rollup

License

ESEngine is free and open source under the MIT License. No royalties, no strings attached.

Installation

npm

npm install @esengine/ecs-framework

Editor

Download pre-built binaries from the Releases page (Windows, 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;
        }
    }
}

// Initialize
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
function gameLoop(currentTime: number) {
    Core.update(currentTime / 1000);
    requestAnimationFrame(gameLoop);
}
requestAnimationFrame(gameLoop);

Packages

ESEngine is organized as a monorepo with 50+ modular packages. Install only what you need.

Essential

npm install @esengine/ecs-framework  # Core ECS (can be used standalone)
npm install @esengine/engine-core    # Full engine with module system
Category Packages
Rendering sprite, tilemap, particle, mesh-3d, fairygui
Physics physics-rapier2d
AI & Logic behavior-tree, blueprint
Network network, network-server
Platform platform-web, platform-wechat
View all 50+ packages

Core

  • @esengine/ecs-framework - ECS framework core
  • @esengine/math - Vector, matrix utilities
  • @esengine/engine - Rust/WASM renderer
  • @esengine/engine-core - Module lifecycle

Runtime

  • @esengine/sprite - 2D sprites & animation
  • @esengine/tilemap - Tile-based maps
  • @esengine/particle - Particle effects
  • @esengine/physics-rapier2d - 2D physics
  • @esengine/behavior-tree - AI behavior trees
  • @esengine/blueprint - Visual scripting
  • @esengine/camera - Camera system
  • @esengine/audio - Audio playback
  • @esengine/fairygui - FairyGUI integration
  • @esengine/mesh-3d - 3D mesh (FBX/GLTF/OBJ)
  • @esengine/material-system - Materials & shaders
  • @esengine/asset-system - Asset management
  • @esengine/world-streaming - Large world streaming

Network

  • @esengine/network - Client (TSRPC)
  • @esengine/network-server - Server runtime
  • @esengine/network-protocols - Shared protocols

Editor Extensions

All runtime modules have corresponding -editor packages for visual editing.

Platform

  • @esengine/platform-common - Platform abstraction
  • @esengine/platform-web - Web runtime
  • @esengine/platform-wechat - WeChat Mini Game

Editor

The ESEngine Editor is a cross-platform desktop application built with Tauri and React.

Features

  • Scene hierarchy and entity management
  • Component inspector with custom property editors
  • Asset browser with drag-and-drop
  • Tilemap editor with paint and fill tools
  • Behavior tree visual editor
  • Blueprint visual scripting
  • Material and shader editing
  • Built-in performance profiler
  • Localization (English, Chinese)

Screenshot

ESEngine Editor

Platform Support

Platform Runtime Editor
Web Browser -
Windows -
macOS -
WeChat Mini Game In Progress -
Playable Ads Planned -
Android Planned -
iOS Planned -

Building from Source

Prerequisites

  • Node.js 18+
  • pnpm 10+
  • Rust toolchain (for WASM renderer)
  • wasm-pack

Setup

git clone https://github.com/esengine/esengine.git
cd esengine

pnpm install
pnpm build

# Optional: Build WASM renderer
pnpm build:wasm

Run Editor

cd packages/editor-app
pnpm tauri:dev

Project Structure

esengine/
├── packages/
│   ├── core/                    # ECS Framework (@esengine/ecs-framework)
│   ├── math/                    # Math library (@esengine/math)
│   ├── engine-core/             # Engine lifecycle management
│   ├── sprite/                  # 2D sprite rendering
│   ├── tilemap/                 # Tilemap system
│   ├── physics-rapier2d/        # Physics engine
│   ├── behavior-tree/           # AI behavior trees
│   ├── editor-app/              # Desktop editor (Tauri)
│   └── ...                      # Other modules
├── docs/                        # Documentation source
├── examples/                    # Example projects
├── scripts/                     # Build utilities
└── thirdparty/                  # Third-party dependencies

Looking for ECS source code? The ECS framework is in packages/core/

Documentation

Community

Contributing

Contributions are welcome. Please read the contributing guidelines before submitting a pull request.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

ESEngine is licensed under the MIT License.


Made with ❤️ by the ESEngine team

Languages
TypeScript 89.7%
Rust 4.7%
CSS 4.4%
JavaScript 0.9%
HTML 0.3%