feat: 添加跨平台运行时、资产系统和UI适配功能 (#256)

* feat(platform-common): 添加WASM加载器和环境检测API

* feat(rapier2d): 新增Rapier2D WASM绑定包

* feat(physics-rapier2d): 添加跨平台WASM加载器

* feat(asset-system): 添加运行时资产目录和bundle格式

* feat(asset-system-editor): 新增编辑器资产管理包

* feat(editor-core): 添加构建系统和模块管理

* feat(editor-app): 重构浏览器预览使用import maps

* feat(platform-web): 添加BrowserRuntime和资产读取

* feat(engine): 添加材质系统和着色器管理

* feat(material): 新增材质系统和着色器编辑器

* feat(tilemap): 增强tilemap编辑器和动画系统

* feat(modules): 添加module.json配置

* feat(core): 添加module.json和类型定义更新

* chore: 更新依赖和构建配置

* refactor(plugins): 更新插件模板使用ModuleManifest

* chore: 添加第三方依赖库

* chore: 移除BehaviourTree-ai和ecs-astar子模块

* docs: 更新README和文档主题样式

* fix: 修复Rust文档测试和添加rapier2d WASM绑定

* fix(tilemap-editor): 修复画布高DPI屏幕分辨率适配问题

* feat(ui): 添加UI屏幕适配系统(CanvasScaler/SafeArea)

* fix(ecs-engine-bindgen): 添加缺失的ecs-framework-math依赖

* fix: 添加缺失的包依赖修复CI构建

* fix: 修复CodeQL检测到的代码问题

* fix: 修复构建错误和缺失依赖

* fix: 修复类型检查错误

* fix(material-system): 修复tsconfig配置支持TypeScript项目引用

* fix(editor-core): 修复Rollup构建配置添加tauri external

* fix: 修复CodeQL检测到的代码问题

* fix: 修复CodeQL检测到的代码问题
This commit is contained in:
YHH
2025-12-03 22:15:22 +08:00
committed by GitHub
parent caf7622aa0
commit 63f006ab62
496 changed files with 77601 additions and 4067 deletions

View File

@@ -0,0 +1,64 @@
/**
* Material asset loader.
* 材质资产加载器。
*/
import {
AssetType,
IAssetContent,
IAssetParseContext
} from '@esengine/asset-system';
import type { IAssetLoader, AssetContentType } from '@esengine/asset-system';
import { Material } from '../Material';
/**
* Material asset data structure.
* 材质资产数据结构。
*/
export interface IMaterialAssetData {
/** Material instance. | 材质实例。 */
material: Material;
/** Material definition data. | 材质定义数据。 */
definition: Record<string, unknown>;
}
/**
* Material file loader.
* 材质文件加载器。
*/
export class MaterialLoader implements IAssetLoader<IMaterialAssetData> {
readonly supportedType = AssetType.Material;
readonly supportedExtensions = ['.mat'];
readonly contentType: AssetContentType = 'text';
/**
* Parse material from content.
* 从内容解析材质。
*/
async parse(content: IAssetContent, context: IAssetParseContext): Promise<IMaterialAssetData> {
if (!content.text) {
throw new Error('Material content is empty');
}
const data = JSON.parse(content.text);
// Support wrapper format: { material: {...} }
const materialDef = data.material || data;
// Create material from definition.
const material = Material.fromDefinition(materialDef);
return {
material,
definition: materialDef
};
}
/**
* Dispose material asset.
* 释放材质资产。
*/
dispose(_asset: IMaterialAssetData): void {
// Material cleanup if needed.
}
}

View File

@@ -0,0 +1,87 @@
/**
* Shader asset loader.
* 着色器资产加载器。
*/
import {
AssetType,
IAssetContent,
IAssetParseContext
} from '@esengine/asset-system';
import type { IAssetLoader, AssetContentType } from '@esengine/asset-system';
import { Shader } from '../Shader';
import type { ShaderDefinition } from '../types';
/**
* Shader asset data structure.
* 着色器资产数据结构。
*/
export interface IShaderAssetData {
/** Shader instance. | 着色器实例。 */
shader: Shader;
/** Shader definition data. | 着色器定义数据。 */
definition: ShaderDefinition;
}
/**
* Shader file format.
* 着色器文件格式。
*
* ```json
* {
* "version": 1,
* "shader": {
* "name": "CustomShader",
* "vertexSource": "...",
* "fragmentSource": "...",
* "uniforms": { ... }
* }
* }
* ```
*/
export interface ShaderFileFormat {
version: number;
shader: ShaderDefinition;
}
/**
* Shader file loader.
* 着色器文件加载器。
*/
export class ShaderLoader implements IAssetLoader<IShaderAssetData> {
readonly supportedType = AssetType.Shader;
readonly supportedExtensions = ['.shader'];
readonly contentType: AssetContentType = 'text';
/**
* Parse shader from content.
* 从内容解析着色器。
*/
async parse(content: IAssetContent, context: IAssetParseContext): Promise<IShaderAssetData> {
if (!content.text) {
throw new Error('Shader content is empty');
}
const data = JSON.parse(content.text) as ShaderFileFormat;
if (!data.shader) {
throw new Error('Invalid shader file: missing shader definition');
}
const shaderDef = data.shader;
const shader = Shader.fromDefinition(shaderDef);
return {
shader,
definition: shaderDef
};
}
/**
* Dispose shader asset.
* 释放着色器资产。
*/
dispose(_asset: IShaderAssetData): void {
// Shader cleanup if needed.
}
}