Files
esengine/packages/physics/physics-rapier2d/src/loaders/WebRapier2DLoader.ts
YHH b28169b186 fix(editor): fix build errors and refactor behavior-tree architecture (#394)
* docs: add editor-app README with setup instructions

* docs: add separate EN/CN editor setup guides

* fix(editor): fix build errors and refactor behavior-tree architecture

- Fix fairygui-editor tsconfig extends path and add missing tsconfig.build.json
- Refactor behavior-tree-editor to not depend on asset-system in runtime
  - Create local BehaviorTreeRuntimeModule for pure runtime logic
  - Move asset loader registration to editor module install()
  - Add BehaviorTreeLoader for asset system integration
- Fix rapier2d WASM loader to not pass arguments to init()
- Add WASM base64 loader config to rapier2d tsup.config
- Update README documentation and simplify setup steps
2025-12-30 11:13:26 +08:00

96 lines
2.2 KiB
TypeScript

/**
* Web 平台 Rapier2D 加载器
*
* 使用 @esengine/rapier2d 标准版(独立 WASM 文件)
*/
import type {
IWasmLibraryLoader,
WasmLibraryConfig,
PlatformInfo
} from '@esengine/platform-common';
import { PlatformType, isEditorEnvironment } from '@esengine/platform-common';
/**
* Rapier2D 模块类型
*/
type RapierModule = typeof import('@esengine/rapier2d');
/**
* Web 平台 Rapier2D 加载器
*
* 使用标准版,需要配置 WASM 路径
*
* @example
* ```typescript
* const loader = new WebRapier2DLoader(config);
* if (loader.isSupported()) {
* const RAPIER = await loader.load();
* // 使用 RAPIER...
* }
* ```
*/
export class WebRapier2DLoader implements IWasmLibraryLoader<RapierModule> {
private _config: WasmLibraryConfig;
/**
* 创建 Web 平台 Rapier2D 加载器
*
* @param config - 加载器配置
*/
constructor(config: WasmLibraryConfig) {
this._config = config;
}
/**
* 加载 Rapier2D 模块
*
* @returns 初始化完成的 Rapier2D 模块
*/
async load(): Promise<RapierModule> {
console.log(`[${this._config.name}] 正在加载 Web 版本...`);
// 动态导入标准版
const RAPIER = await import('@esengine/rapier2d');
// 初始化 WASM - WASM 已经作为 base64 嵌入到包中
// Initialize WASM - WASM is embedded as base64 in the package
await RAPIER.init();
console.log(`[${this._config.name}] 加载完成`);
return RAPIER;
}
/**
* 检查是否支持 WebAssembly
*
* @returns 是否支持
*/
isSupported(): boolean {
return typeof WebAssembly !== 'undefined';
}
/**
* 获取平台信息
* Get platform information
*/
getPlatformInfo(): PlatformInfo {
return {
type: PlatformType.Web,
supportsWasm: typeof WebAssembly !== 'undefined',
supportsSharedArrayBuffer: typeof SharedArrayBuffer !== 'undefined',
needsPolyfills: [],
isEditor: isEditorEnvironment()
};
}
/**
* 获取加载器配置
*
* @returns 配置对象
*/
getConfig(): WasmLibraryConfig {
return this._config;
}
}