YHH 068ca4bf69 feat(spatial): 空间查询和索引系统 (#324)
* feat(spatial): 添加空间查询包

- ISpatialQuery: 空间查询接口
  - findInRadius, findInRect, findNearest, findKNearest
  - raycast, raycastFirst
  - IBounds, IRaycastHit, SpatialFilter 类型

- ISpatialIndex: 空间索引接口
  - insert, remove, update, clear, getAll

- GridSpatialIndex: 网格空间索引实现
  - 基于均匀网格的空间划分
  - 支持所有 ISpatialQuery 操作

- 工具函数
  - createBounds, isPointInBounds, boundsIntersect
  - distanceSquared, distance

* feat(spatial): 添加空间查询蓝图节点

- 添加 FindInRadius/FindInRect/FindNearest/FindKNearest 节点
- 添加 Raycast/RaycastFirst 射线检测节点
- 每个节点包含模板和执行器
- 使用 menuPath: ['Spatial', ...] 组织节点菜单
2025-12-25 12:15:06 +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%