diff --git a/packages/editor-app/src/App.tsx b/packages/editor-app/src/App.tsx index a5eb9193..08b18aaa 100644 --- a/packages/editor-app/src/App.tsx +++ b/packages/editor-app/src/App.tsx @@ -8,7 +8,6 @@ import { SceneHierarchy } from './components/SceneHierarchy'; import { EntityInspector } from './components/EntityInspector'; import { AssetBrowser } from './components/AssetBrowser'; import { ConsolePanel } from './components/ConsolePanel'; -import { ProfilerPanel } from './components/ProfilerPanel'; import { PluginManagerWindow } from './components/PluginManagerWindow'; import { ProfilerWindow } from './components/ProfilerWindow'; import { PortManager } from './components/PortManager'; @@ -101,9 +100,8 @@ function App() { console.log('[App] Remote game disconnected'); setIsRemoteConnected(false); if (projectLoaded) { - const projectService = Core.services.resolve(ProjectService); const componentRegistry = Core.services.resolve(ComponentRegistry); - const componentCount = componentRegistry?.getRegisteredComponents().length || 0; + const componentCount = componentRegistry?.getAllComponents().length || 0; setStatus(t('header.status.projectOpened') + (componentCount > 0 ? ` (${componentCount} components registered)` : '')); } else { setStatus(t('header.status.ready')); diff --git a/packages/editor-app/src/components/ConsolePanel.tsx b/packages/editor-app/src/components/ConsolePanel.tsx index 94fa81a8..c06f636e 100644 --- a/packages/editor-app/src/components/ConsolePanel.tsx +++ b/packages/editor-app/src/components/ConsolePanel.tsx @@ -106,13 +106,11 @@ export function ConsolePanel({ logService }: ConsolePanelProps) { }; const formatTime = (date: Date): string => { - return date.toLocaleTimeString('en-US', { - hour12: false, - hour: '2-digit', - minute: '2-digit', - second: '2-digit', - fractionalSecondDigits: 3 - }); + const hours = date.getHours().toString().padStart(2, '0'); + const minutes = date.getMinutes().toString().padStart(2, '0'); + const seconds = date.getSeconds().toString().padStart(2, '0'); + const ms = date.getMilliseconds().toString().padStart(3, '0'); + return `${hours}:${minutes}:${seconds}.${ms}`; }; const toggleLogExpand = (logId: number) => { diff --git a/packages/editor-app/src/components/EntityInspector.tsx b/packages/editor-app/src/components/EntityInspector.tsx index 2b292d43..6d49a86b 100644 --- a/packages/editor-app/src/components/EntityInspector.tsx +++ b/packages/editor-app/src/components/EntityInspector.tsx @@ -464,7 +464,7 @@ export function EntityInspector({ entityStore: _entityStore, messageHub }: Entit
ID: - {selectedEntity.id} + {selectedEntity!.id}
Name: diff --git a/packages/editor-app/src/components/MenuBar.tsx b/packages/editor-app/src/components/MenuBar.tsx index 1d924728..8db32e32 100644 --- a/packages/editor-app/src/components/MenuBar.tsx +++ b/packages/editor-app/src/components/MenuBar.tsx @@ -4,7 +4,7 @@ import type { MenuItem as PluginMenuItem } from '@esengine/editor-core'; import '../styles/MenuBar.css'; interface MenuItem { - label: string; + label?: string; shortcut?: string; disabled?: boolean; separator?: boolean; @@ -215,12 +215,12 @@ export function MenuBar({ { label: t('viewport'), disabled: true }, { separator: true }, ...pluginMenuItems.map(item => ({ - label: item.label, + label: item.label || '', shortcut: item.shortcut, disabled: item.disabled, onClick: item.onClick })), - ...(pluginMenuItems.length > 0 ? [{ separator: true }] : []), + ...(pluginMenuItems.length > 0 ? [{ separator: true } as MenuItem] : []), { label: t('pluginManager'), onClick: onOpenPluginManager }, { separator: true }, { label: t('devtools'), onClick: onToggleDevtools } @@ -255,7 +255,7 @@ export function MenuBar({ }; const handleMenuItemClick = (item: MenuItem) => { - if (!item.disabled && !item.separator && item.onClick) { + if (!item.disabled && !item.separator && item.onClick && item.label) { item.onClick(); setOpenMenu(null); } @@ -271,7 +271,7 @@ export function MenuBar({ > {t(menuKey)} - {openMenu === menuKey && ( + {openMenu === menuKey && menus[menuKey] && (
{menus[menuKey].map((item, index) => { if (item.separator) { @@ -284,7 +284,7 @@ export function MenuBar({ onClick={() => handleMenuItemClick(item)} disabled={item.disabled} > - {item.label} + {item.label || ''} {item.shortcut && {item.shortcut}} ); diff --git a/packages/editor-app/src/components/PortManager.tsx b/packages/editor-app/src/components/PortManager.tsx index 954d3823..9ba964ca 100644 --- a/packages/editor-app/src/components/PortManager.tsx +++ b/packages/editor-app/src/components/PortManager.tsx @@ -9,7 +9,7 @@ interface PortManagerProps { export function PortManager({ onClose }: PortManagerProps) { const [isServerRunning, setIsServerRunning] = useState(false); - const [serverPort, setServerPort] = useState(8080); + const [serverPort] = useState(8080); const [isChecking, setIsChecking] = useState(false); const [isStopping, setIsStopping] = useState(false); diff --git a/packages/editor-app/src/components/ProfilerPanel.tsx b/packages/editor-app/src/components/ProfilerPanel.tsx index ebc950e0..9fbd3983 100644 --- a/packages/editor-app/src/components/ProfilerPanel.tsx +++ b/packages/editor-app/src/components/ProfilerPanel.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useRef } from 'react'; import { Core } from '@esengine/ecs-framework'; -import { Activity, BarChart3, Clock, Cpu, TrendingUp, RefreshCw, Pause, Play } from 'lucide-react'; +import { Activity, BarChart3, Clock, Cpu, RefreshCw, Pause, Play } from 'lucide-react'; import '../styles/ProfilerPanel.css'; interface SystemPerformanceData { diff --git a/packages/editor-app/src/components/ProfilerWindow.tsx b/packages/editor-app/src/components/ProfilerWindow.tsx index 17d20e80..22e03084 100644 --- a/packages/editor-app/src/components/ProfilerWindow.tsx +++ b/packages/editor-app/src/components/ProfilerWindow.tsx @@ -28,7 +28,7 @@ export function ProfilerWindow({ onClose }: ProfilerWindowProps) { const [systems, setSystems] = useState([]); const [totalFrameTime, setTotalFrameTime] = useState(0); const [isPaused, setIsPaused] = useState(false); - const [sortBy, setSortBy] = useState<'time' | 'average' | 'name'>('time'); + const [sortBy] = useState<'time' | 'average' | 'name'>('time'); const [dataSource, setDataSource] = useState('local'); const [viewMode, setViewMode] = useState<'tree' | 'table'>('table'); const [searchQuery, setSearchQuery] = useState(''); diff --git a/packages/editor-app/src/components/SceneHierarchy.tsx b/packages/editor-app/src/components/SceneHierarchy.tsx index 1a1ca138..206b5d24 100644 --- a/packages/editor-app/src/components/SceneHierarchy.tsx +++ b/packages/editor-app/src/components/SceneHierarchy.tsx @@ -108,12 +108,12 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps) }; // Filter entities based on search query - const filterEntities = (entityList: T[]): T[] => { + const filterRemoteEntities = (entityList: RemoteEntity[]): RemoteEntity[] => { if (!searchQuery.trim()) return entityList; const query = searchQuery.toLowerCase(); return entityList.filter(entity => { - const name = 'name' in entity ? entity.name : `Entity ${entity.id}`; + const name = entity.name; const id = entity.id.toString(); // Search by name or ID @@ -121,8 +121,8 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps) return true; } - // Search by component types (for remote entities) - if ('componentTypes' in entity && Array.isArray(entity.componentTypes)) { + // Search by component types + if (Array.isArray(entity.componentTypes)) { return entity.componentTypes.some(type => type.toLowerCase().includes(query) ); @@ -132,8 +132,20 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps) }); }; + const filterLocalEntities = (entityList: Entity[]): Entity[] => { + if (!searchQuery.trim()) return entityList; + + const query = searchQuery.toLowerCase(); + return entityList.filter(entity => { + const id = entity.id.toString(); + return id.includes(query); + }); + }; + // Determine which entities to display - const displayEntities = filterEntities(isRemoteConnected ? remoteEntities : entities); + const displayEntities = isRemoteConnected + ? filterRemoteEntities(remoteEntities) + : filterLocalEntities(entities); const showRemoteIndicator = isRemoteConnected && remoteEntities.length > 0; return ( @@ -169,7 +181,7 @@ export function SceneHierarchy({ entityStore, messageHub }: SceneHierarchyProps)
) : isRemoteConnected ? (