/** * Tile Set Selector Panel - Left panel for selecting tiles * 瓦片集选择面板 - 左侧面板用于选择瓦片 */ import React, { useState, useCallback } from 'react'; import { Paintbrush, Eraser, PaintBucket, ChevronDown, Grid3x3, Search } from 'lucide-react'; import { useTilemapEditorStore, type TilemapToolType } from '../../stores/TilemapEditorStore'; import { TilesetPreview } from '../TilesetPreview'; import '../../styles/TileSetSelectorPanel.css'; interface TilesetOption { name: string; path: string; } interface TileSetSelectorPanelProps { tilesets: TilesetOption[]; activeTilesetIndex: number; onTilesetChange: (index: number) => void; onAddTileset: () => void; } export const TileSetSelectorPanel: React.FC = ({ tilesets, activeTilesetIndex, onTilesetChange, onAddTileset }) => { const { currentTool, setCurrentTool, tilesetImageUrl, tileWidth, tileHeight, tilesetColumns, tilesetRows, selectedTiles } = useTilemapEditorStore(); const [showTilesetDropdown, setShowTilesetDropdown] = useState(false); const [previewZoom, setPreviewZoom] = useState(1); const handleToolChange = useCallback((tool: TilemapToolType) => { setCurrentTool(tool); }, [setCurrentTool]); const activeTileset = tilesets[activeTilesetIndex]; return (
{/* Tool buttons */}
{/* Active Tile Set selector */}
{showTilesetDropdown && (
{tilesets.map((tileset, index) => ( ))}
)}
{/* Zoom and title header */}
缩放{previewZoom}:1 瓦片集选择器
{/* Tile preview area */}
{tilesetImageUrl ? ( ) : (
)}
{/* Selection info */} {selectedTiles && (
已选择: {selectedTiles.width}×{selectedTiles.height}
)}
); }; export default TileSetSelectorPanel;