feat(editor-core): 改进编辑器核心服务
- EntityStoreService 添加调试日志 - AssetRegistryService 优化资产注册 - PluginManager 改进插件管理 - IFileAPI 添加 getFileMtime 接口
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
* Unified Plugin Manager
|
* Unified Plugin Manager
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { createLogger, ComponentRegistry } from '@esengine/ecs-framework';
|
import { createLogger, GlobalComponentRegistry } from '@esengine/ecs-framework';
|
||||||
import type { IScene, ServiceContainer, IService } from '@esengine/ecs-framework';
|
import type { IScene, ServiceContainer, IService } from '@esengine/ecs-framework';
|
||||||
import type {
|
import type {
|
||||||
ModuleManifest,
|
ModuleManifest,
|
||||||
@@ -670,9 +670,9 @@ export class PluginManager implements IService {
|
|||||||
// 注册组件(使用包装的 Registry 来跟踪)
|
// 注册组件(使用包装的 Registry 来跟踪)
|
||||||
// Register components (use wrapped registry to track)
|
// Register components (use wrapped registry to track)
|
||||||
if (runtimeModule.registerComponents) {
|
if (runtimeModule.registerComponents) {
|
||||||
const componentsBefore = new Set(ComponentRegistry.getRegisteredComponents().map(c => c.name));
|
const componentsBefore = new Set(GlobalComponentRegistry.getRegisteredComponents().map(c => c.name));
|
||||||
runtimeModule.registerComponents(ComponentRegistry);
|
runtimeModule.registerComponents(GlobalComponentRegistry);
|
||||||
const componentsAfter = ComponentRegistry.getRegisteredComponents();
|
const componentsAfter = GlobalComponentRegistry.getRegisteredComponents();
|
||||||
|
|
||||||
// 跟踪新注册的组件
|
// 跟踪新注册的组件
|
||||||
// Track newly registered components
|
// Track newly registered components
|
||||||
@@ -779,7 +779,7 @@ export class PluginManager implements IService {
|
|||||||
if (resources.componentTypeNames.length > 0) {
|
if (resources.componentTypeNames.length > 0) {
|
||||||
for (const componentName of resources.componentTypeNames) {
|
for (const componentName of resources.componentTypeNames) {
|
||||||
try {
|
try {
|
||||||
ComponentRegistry.unregister(componentName);
|
GlobalComponentRegistry.unregister(componentName);
|
||||||
logger.debug(`Component unregistered: ${componentName}`);
|
logger.debug(`Component unregistered: ${componentName}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error(`Failed to unregister component ${componentName}:`, e);
|
logger.error(`Failed to unregister component ${componentName}:`, e);
|
||||||
@@ -900,7 +900,7 @@ export class PluginManager implements IService {
|
|||||||
const runtimeModule = plugin.plugin.runtimeModule;
|
const runtimeModule = plugin.plugin.runtimeModule;
|
||||||
if (runtimeModule?.registerComponents) {
|
if (runtimeModule?.registerComponents) {
|
||||||
try {
|
try {
|
||||||
runtimeModule.registerComponents(ComponentRegistry);
|
runtimeModule.registerComponents(GlobalComponentRegistry);
|
||||||
logger.debug(`Components registered for: ${pluginId}`);
|
logger.debug(`Components registered for: ${pluginId}`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logger.error(`Failed to register components for ${pluginId}:`, e);
|
logger.error(`Failed to register components for ${pluginId}:`, e);
|
||||||
|
|||||||
@@ -394,8 +394,14 @@ export class AssetRegistryService implements IService {
|
|||||||
// 处理文件创建 - 注册新资产并生成 .meta
|
// 处理文件创建 - 注册新资产并生成 .meta
|
||||||
if (changeType === 'create' || changeType === 'modify') {
|
if (changeType === 'create' || changeType === 'modify') {
|
||||||
for (const absolutePath of paths) {
|
for (const absolutePath of paths) {
|
||||||
// Skip .meta files
|
// Handle .meta file changes - invalidate cache
|
||||||
if (absolutePath.endsWith('.meta')) continue;
|
// 处理 .meta 文件变化 - 使缓存失效
|
||||||
|
if (absolutePath.endsWith('.meta')) {
|
||||||
|
const assetPath = absolutePath.slice(0, -5); // Remove '.meta' suffix
|
||||||
|
this._metaManager.invalidateCache(assetPath);
|
||||||
|
logger.debug(`Meta file changed, invalidated cache for: ${assetPath}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Only process files in managed directories
|
// Only process files in managed directories
|
||||||
// 只处理托管目录中的文件
|
// 只处理托管目录中的文件
|
||||||
@@ -406,8 +412,14 @@ export class AssetRegistryService implements IService {
|
|||||||
}
|
}
|
||||||
} else if (changeType === 'remove') {
|
} else if (changeType === 'remove') {
|
||||||
for (const absolutePath of paths) {
|
for (const absolutePath of paths) {
|
||||||
// Skip .meta files
|
// Handle .meta file deletion - invalidate cache
|
||||||
if (absolutePath.endsWith('.meta')) continue;
|
// 处理 .meta 文件删除 - 使缓存失效
|
||||||
|
if (absolutePath.endsWith('.meta')) {
|
||||||
|
const assetPath = absolutePath.slice(0, -5);
|
||||||
|
this._metaManager.invalidateCache(assetPath);
|
||||||
|
logger.debug(`Meta file removed, invalidated cache for: ${assetPath}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Only process files in managed directories
|
// Only process files in managed directories
|
||||||
// 只处理托管目录中的文件
|
// 只处理托管目录中的文件
|
||||||
|
|||||||
@@ -95,6 +95,9 @@ export class EntityStoreService implements IService {
|
|||||||
this.entities.clear();
|
this.entities.clear();
|
||||||
this.rootEntityIds = [];
|
this.rootEntityIds = [];
|
||||||
|
|
||||||
|
// 调试:打印场景实体信息 | Debug: print scene entity info
|
||||||
|
logger.info(`[syncFromScene] Scene name: ${scene.name}, entities.count: ${scene.entities.count}`);
|
||||||
|
|
||||||
let entityCount = 0;
|
let entityCount = 0;
|
||||||
scene.entities.forEach((entity) => {
|
scene.entities.forEach((entity) => {
|
||||||
entityCount++;
|
entityCount++;
|
||||||
@@ -106,7 +109,7 @@ export class EntityStoreService implements IService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.debug(`syncFromScene: synced ${entityCount} entities, ${this.rootEntityIds.length} root entities`);
|
logger.info(`[syncFromScene] Synced ${entityCount} entities, ${this.rootEntityIds.length} root entities`);
|
||||||
if (this.rootEntityIds.length > 0) {
|
if (this.rootEntityIds.length > 0) {
|
||||||
const rootNames = this.rootEntityIds
|
const rootNames = this.rootEntityIds
|
||||||
.map(id => this.entities.get(id)?.name)
|
.map(id => this.entities.get(id)?.name)
|
||||||
|
|||||||
@@ -61,4 +61,13 @@ export interface IFileAPI {
|
|||||||
* @returns 路径是否存在
|
* @returns 路径是否存在
|
||||||
*/
|
*/
|
||||||
pathExists(path: string): Promise<boolean>;
|
pathExists(path: string): Promise<boolean>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取文件修改时间
|
||||||
|
* Get file modification time
|
||||||
|
*
|
||||||
|
* @param path 文件路径 | File path
|
||||||
|
* @returns 文件修改时间(毫秒时间戳)| File modification time (milliseconds timestamp)
|
||||||
|
*/
|
||||||
|
getFileMtime?(path: string): Promise<number>;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user