refactor(arch): 改进 ServiceToken 设计,统一服务获取模式 (#300)
* refactor(arch): 移除全局变量,使用 ServiceToken 模式 - 创建 PluginServiceRegistry 类,提供类型安全的服务注册/获取 - 添加 ProfilerServiceToken 和 CollisionLayerConfigToken - 重构所有 __PROFILER_SERVICE__ 全局变量访问为 getProfilerService() - 重构 __PHYSICS_RAPIER2D__ 全局变量访问为 CollisionLayerConfigToken - 在 Core 类添加 pluginServices 静态属性 - 添加 getService.ts 辅助模块简化服务获取 这是 ServiceToken 模式重构的第一阶段,移除了最常用的两个全局变量。 后续可继续应用到其他模块(Camera/Audio 等)。 * refactor(arch): 改进 ServiceToken 设计,移除重复常量 - tokens.ts: 从 engine-core 导入 createServiceToken(符合规范) - tokens.ts: Token 使用接口 IProfilerService 而非具体类 - 移除 AssetPickerDialog 和 ContentBrowser 中重复的 MANAGED_ASSET_DIRECTORIES - 统一从 editor-core 导入 MANAGED_ASSET_DIRECTORIES * fix(type): 修复 IProfilerService 接口与实现类型不匹配 - 将 ProfilerData 等数据类型移到 tokens.ts 以避免循环依赖 - ProfilerService 显式实现 IProfilerService 接口 - 更新使用方使用 IProfilerService 接口类型而非具体类 * refactor(type): 移除类型重导出,改进类型安全 - 删除 ProfilerService.ts 中的类型重导出,消费方直接从 tokens.ts 导入 - PanelDescriptor 接口添加 titleZh 属性,移除 App.tsx 中的 as any - 改进 useDynamicIcon.ts 的类型安全,使用正确的 Record 类型 * refactor(arch): 为模块添加 ServiceToken 支持 - Material System: 创建 tokens.ts,定义 IMaterialManager 接口和 MaterialManagerToken - Audio: 创建预留 tokens.ts 文件,为未来 AudioManager 服务扩展做准备 - Camera: 创建预留 tokens.ts 文件,为未来 CameraManager 服务扩展做准备 遵循"谁定义接口,谁导出 Token"原则,统一服务访问模式
This commit is contained in:
@@ -54,3 +54,8 @@ export type { IShaderAssetData, ShaderFileFormat } from './loaders/ShaderLoader'
|
||||
// 运行时模块。
|
||||
export { MaterialRuntimeModule, materialRuntimeModule, MaterialSystemPlugin } from './MaterialSystemPlugin';
|
||||
export type { IMaterialRuntimeModule } from './MaterialSystemPlugin';
|
||||
|
||||
// Service Tokens.
|
||||
// 服务令牌。
|
||||
export { MaterialManagerToken } from './tokens';
|
||||
export type { IMaterialManager } from './tokens';
|
||||
|
||||
174
packages/material-system/src/tokens.ts
Normal file
174
packages/material-system/src/tokens.ts
Normal file
@@ -0,0 +1,174 @@
|
||||
/**
|
||||
* Material System Service Tokens
|
||||
* 材质系统服务令牌
|
||||
*
|
||||
* 遵循"谁定义接口,谁导出 Token"原则。
|
||||
* Following "who defines interface, who exports Token" principle.
|
||||
*/
|
||||
|
||||
import { createServiceToken } from '@esengine/engine-core';
|
||||
import type { Material } from './Material';
|
||||
import type { Shader } from './Shader';
|
||||
import type { IEngineBridge } from './MaterialManager';
|
||||
import type { IAssetManager } from '@esengine/asset-system';
|
||||
|
||||
// ============================================================================
|
||||
// Material Manager Interface
|
||||
// ============================================================================
|
||||
|
||||
/**
|
||||
* MaterialManager 接口
|
||||
* MaterialManager interface
|
||||
*
|
||||
* 提供材质和着色器管理功能。
|
||||
* Provides material and shader management functionality.
|
||||
*/
|
||||
export interface IMaterialManager {
|
||||
// ========== Initialization | 初始化 ==========
|
||||
|
||||
/**
|
||||
* 设置引擎桥接
|
||||
* Set engine bridge for Rust communication
|
||||
*/
|
||||
setEngineBridge(bridge: IEngineBridge): void;
|
||||
|
||||
/**
|
||||
* 设置资产管理器
|
||||
* Set asset manager for loading assets
|
||||
*/
|
||||
setAssetManager(assetManager: IAssetManager): void;
|
||||
|
||||
/**
|
||||
* 初始化内置材质
|
||||
* Initialize built-in materials
|
||||
*/
|
||||
initializeBuiltInMaterials(): Promise<void>;
|
||||
|
||||
// ========== Shader Management | 着色器管理 ==========
|
||||
|
||||
/**
|
||||
* 注册着色器
|
||||
* Register a shader
|
||||
*/
|
||||
registerShader(shader: Shader): Promise<number>;
|
||||
|
||||
/**
|
||||
* 通过 ID 获取着色器
|
||||
* Get shader by ID
|
||||
*/
|
||||
getShader(id: number): Shader | undefined;
|
||||
|
||||
/**
|
||||
* 通过名称获取着色器
|
||||
* Get shader by name
|
||||
*/
|
||||
getShaderByName(name: string): Shader | undefined;
|
||||
|
||||
/**
|
||||
* 移除着色器
|
||||
* Remove a shader
|
||||
*/
|
||||
removeShader(id: number): boolean;
|
||||
|
||||
/**
|
||||
* 从路径加载着色器
|
||||
* Load shader from path
|
||||
*/
|
||||
loadShaderByPath(path: string): Promise<number>;
|
||||
|
||||
// ========== Material Management | 材质管理 ==========
|
||||
|
||||
/**
|
||||
* 注册材质
|
||||
* Register a material
|
||||
*/
|
||||
registerMaterial(material: Material): Promise<number>;
|
||||
|
||||
/**
|
||||
* 通过 ID 获取材质
|
||||
* Get material by ID
|
||||
*/
|
||||
getMaterial(id: number): Material | undefined;
|
||||
|
||||
/**
|
||||
* 通过名称获取材质
|
||||
* Get material by name
|
||||
*/
|
||||
getMaterialByName(name: string): Material | undefined;
|
||||
|
||||
/**
|
||||
* 移除材质
|
||||
* Remove a material
|
||||
*/
|
||||
removeMaterial(id: number): boolean;
|
||||
|
||||
/**
|
||||
* 从路径加载材质
|
||||
* Load material from path
|
||||
*/
|
||||
loadMaterialByPath(path: string): Promise<number>;
|
||||
|
||||
/**
|
||||
* 克隆材质
|
||||
* Clone a material
|
||||
*/
|
||||
cloneMaterial(materialId: number, newName?: string): Promise<Material | null>;
|
||||
|
||||
// ========== Built-in Materials | 内置材质 ==========
|
||||
|
||||
/**
|
||||
* 获取默认材质 ID
|
||||
* Get default material ID
|
||||
*/
|
||||
getDefaultMaterialId(): number;
|
||||
|
||||
/**
|
||||
* 获取灰度材质 ID
|
||||
* Get grayscale material ID
|
||||
*/
|
||||
getGrayscaleMaterialId(): number;
|
||||
|
||||
/**
|
||||
* 获取着色材质 ID
|
||||
* Get tint material ID
|
||||
*/
|
||||
getTintMaterialId(): number;
|
||||
|
||||
/**
|
||||
* 获取闪烁材质 ID
|
||||
* Get flash material ID
|
||||
*/
|
||||
getFlashMaterialId(): number;
|
||||
|
||||
/**
|
||||
* 获取轮廓材质 ID
|
||||
* Get outline material ID
|
||||
*/
|
||||
getOutlineMaterialId(): number;
|
||||
|
||||
// ========== Uniform Management | Uniform 管理 ==========
|
||||
|
||||
/**
|
||||
* 设置材质 uniform 值
|
||||
* Set material uniform value
|
||||
*/
|
||||
setMaterialUniform(materialId: number, name: string, value: any): boolean;
|
||||
|
||||
// ========== Lifecycle | 生命周期 ==========
|
||||
|
||||
/**
|
||||
* 销毁管理器,释放所有资源
|
||||
* Destroy manager and release all resources
|
||||
*/
|
||||
destroy(): void;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Service Token
|
||||
// ============================================================================
|
||||
|
||||
/**
|
||||
* MaterialManager 服务令牌
|
||||
* MaterialManager service token
|
||||
*/
|
||||
export const MaterialManagerToken = createServiceToken<IMaterialManager>('materialManager');
|
||||
Reference in New Issue
Block a user