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:
@@ -22,9 +22,11 @@ import {
|
||||
Physics2DSystemToken,
|
||||
Physics2DWorldToken,
|
||||
PhysicsConfigToken,
|
||||
CollisionLayerConfigToken,
|
||||
type IPhysics2DQuery,
|
||||
type PhysicsConfig
|
||||
} from './tokens';
|
||||
import { CollisionLayerConfig } from './services/CollisionLayerConfig';
|
||||
|
||||
// 注册 Rapier2D 加载器
|
||||
import './loaders';
|
||||
@@ -35,6 +37,7 @@ export {
|
||||
Physics2DSystemToken,
|
||||
Physics2DWorldToken,
|
||||
PhysicsConfigToken,
|
||||
CollisionLayerConfigToken,
|
||||
type IPhysics2DQuery,
|
||||
type PhysicsConfig
|
||||
} from './tokens';
|
||||
@@ -144,6 +147,7 @@ class PhysicsRuntimeModule implements IRuntimeModule {
|
||||
context.services.register(Physics2DSystemToken, physicsSystem);
|
||||
context.services.register(Physics2DWorldToken, physicsSystem.world);
|
||||
context.services.register(Physics2DQueryToken, physicsSystem);
|
||||
context.services.register(CollisionLayerConfigToken, CollisionLayerConfig.getInstance());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,7 +34,9 @@ export {
|
||||
Physics2DSystemToken,
|
||||
Physics2DWorldToken,
|
||||
PhysicsConfigToken,
|
||||
CollisionLayerConfigToken,
|
||||
type IPhysics2DQuery,
|
||||
type IPhysics2DWorld,
|
||||
type ICollisionLayerConfig,
|
||||
type PhysicsConfig
|
||||
} from './tokens';
|
||||
|
||||
@@ -136,6 +136,33 @@ export interface PhysicsConfig {
|
||||
timestep?: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 碰撞层配置接口
|
||||
* Collision layer config interface
|
||||
*
|
||||
* 跨模块共享的碰撞层配置契约。
|
||||
* Cross-module shared collision layer config contract.
|
||||
*/
|
||||
export interface ICollisionLayerConfig {
|
||||
/**
|
||||
* 获取所有层定义
|
||||
* Get all layer definitions
|
||||
*/
|
||||
getLayers(): ReadonlyArray<{ name: string }>;
|
||||
|
||||
/**
|
||||
* 添加监听器
|
||||
* Add listener
|
||||
*/
|
||||
addListener(callback: () => void): void;
|
||||
|
||||
/**
|
||||
* 移除监听器
|
||||
* Remove listener
|
||||
*/
|
||||
removeListener(callback: () => void): void;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 服务令牌 | Service Tokens
|
||||
// ============================================================================
|
||||
@@ -175,3 +202,12 @@ export const Physics2DSystemToken = createServiceToken<Physics2DSystem>('physics
|
||||
* For passing physics configuration (gravity, timestep, etc.).
|
||||
*/
|
||||
export const PhysicsConfigToken = createServiceToken<PhysicsConfig>('physicsConfig');
|
||||
|
||||
/**
|
||||
* 碰撞层配置令牌
|
||||
* Collision layer config token
|
||||
*
|
||||
* 用于获取碰撞层配置服务。
|
||||
* For getting collision layer config service.
|
||||
*/
|
||||
export const CollisionLayerConfigToken = createServiceToken<ICollisionLayerConfig>('collisionLayerConfig');
|
||||
|
||||
Reference in New Issue
Block a user