/** * Tilemap Inspector Provider - Custom inspector for TilemapComponent */ import React from 'react'; import { Edit3 } from 'lucide-react'; import type { IInspectorProvider, InspectorContext } from '@esengine/editor-core'; import { MessageHub } from '@esengine/editor-core'; import { Core } from '@esengine/esengine'; import type { TilemapComponent } from '@esengine/tilemap'; interface TilemapInspectorData { entityId: string; component: TilemapComponent; } export class TilemapInspectorProvider implements IInspectorProvider { readonly id = 'tilemap-component-inspector'; readonly name = 'Tilemap Component Inspector'; readonly priority = 100; canHandle(target: unknown): target is TilemapInspectorData { if (typeof target !== 'object' || target === null) return false; const obj = target as Record; return 'entityId' in obj && 'component' in obj && obj.component !== null && typeof obj.component === 'object' && 'width' in (obj.component as Record) && 'height' in (obj.component as Record) && 'tileWidth' in (obj.component as Record); } render(data: TilemapInspectorData, context: InspectorContext): React.ReactElement { const { entityId, component } = data; const handleEditClick = () => { // Emit event to open tilemap editor const messageHub = Core.services.resolve(MessageHub); messageHub?.publish('tilemap:edit', { entityId }); // Open the tilemap editor panel messageHub?.publish('dynamic-panel:open', { panelId: 'tilemap-editor', title: 'Tilemap Editor' }); }; return (
Tilemap
{component.width} × {component.height}
{component.tileWidth} × {component.tileHeight}
{component.tilesets[0]?.source || 'None'}
{component.layers.length}
); } }