YHH e5e647f1a4 feat(pathfinding): 添加寻路系统模块 (#333)
* feat(pathfinding): 添加寻路系统模块

实现完整的寻路系统,支持 A* 算法、网格地图、导航网格和路径平滑:

A* 寻路算法:
- 高效的二叉堆优先队列
- 可配置的启发式权重
- 最大搜索节点限制
- 支持对角移动和穿角避免

网格地图 (GridMap):
- 基于二维数组的网格地图
- 支持 4 方向和 8 方向移动
- 可变移动代价
- 从数组或字符串加载地图

导航网格 (NavMesh):
- 凸多边形导航网格
- 自动检测相邻多边形
- 漏斗算法路径优化
- 适合复杂地形

路径平滑:
- Bresenham 视线检测
- 射线投射视线检测
- 视线简化器 (移除不必要的拐点)
- Catmull-Rom 曲线平滑
- 组合平滑器

启发式函数:
- 曼哈顿距离 (4方向)
- 欧几里得距离 (任意方向)
- 切比雪夫距离 (8方向)
- 八角距离 (8方向,对角线√2)

蓝图节点 (8个):
- FindPath: 基础寻路
- FindPathSmooth: 平滑寻路
- IsWalkable: 检查可通行性
- GetPathLength: 获取路径点数
- GetPathDistance: 获取路径距离
- GetPathPoint: 获取路径点
- MoveAlongPath: 沿路径移动
- HasLineOfSight: 视线检测

* chore: update pnpm-lock.yaml for pathfinding package
2025-12-25 17:24:24 +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%