import path from 'path' import fs from 'fs' import sharp from 'sharp' import { commandLogger } from '../utilities/logger' import { Server } from 'socket.io' export default class TilesCommand { constructor(private readonly io: Server) {} public async execute(): Promise { // Get all tiles const tilesDir = path.join(process.cwd(), 'public', 'tiles'); const tiles = fs.readdirSync(tilesDir).filter((file) => file.endsWith('.png')); // Create output directory if it doesn't exist if (!fs.existsSync(tilesDir)) { fs.mkdirSync(tilesDir, { recursive: true }); } for (const tile of tiles) { // Check if tile is already 66x34 const metadata = await sharp(path.join(tilesDir, tile)).metadata(); if (metadata.width === 66 && metadata.height === 34) { commandLogger.info(`Tile ${tile} already processed`); continue; } const inputPath = path.join(tilesDir, tile); const outputPath = path.join(tilesDir, tile); try { await sharp(inputPath) .resize({ width: 66, height: 34, fit: 'fill', kernel: 'nearest' }) .toFile(outputPath); commandLogger.info(`Processed: ${tile}`); } catch (error) { console.error(`Error processing ${tile}:`, error); } } commandLogger.info('Tile processing completed.'); } }