class RoomManager { constructor(canvasManager) { this.canvasManager = canvasManager; this.ctx = canvasManager.ctx; this.autoNameRooms = true; } // Generate automatic room names generateRoomName(designElements) { const roomCount = designElements.filter(el => el.type === 'room').length; const roomNames = ['Living Room', 'Kitchen', 'Bedroom', 'Bathroom', 'Dining Room', 'Office', 'Hallway', 'Closet']; return roomNames[roomCount % roomNames.length] || `Room ${roomCount + 1}`; } // Calculate room area calculateRoomArea(startX, startY, endX, endY) { const width = Math.abs(endX - startX); const height = Math.abs(endY - startY); return width * height; } // Create room element createRoomElement(startX, startY, endX, endY, designElements, material, color) { return { id: Date.now().toString(), type: 'room', startX: startX, startY: startY, endX: endX, endY: endY, material: material, color: color, name: this.autoNameRooms ? this.generateRoomName(designElements) : 'Room', area: this.calculateRoomArea(startX, startY, endX, endY) }; } // Draw room preview while dragging drawRoomPreview(startX, startY, endX, endY) { const width = endX - startX; const height = endY - startY; // Draw room outline this.ctx.fillStyle = '#667eea20'; this.ctx.strokeStyle = '#667eea'; this.ctx.lineWidth = 2; this.ctx.fillRect(startX, startY, width, height); this.ctx.strokeRect(startX, startY, width, height); } // Draw room area measurement drawRoomArea(startX, startY, endX, endY) { const area = this.calculateRoomArea(startX, startY, endX, endY); const centerX = (startX + endX) / 2; const centerY = (startY + endY) / 2; this.canvasManager.drawMeasurement(startX, startY, endX, endY, `${Math.round(area)} sq px`); } // Draw room element drawRoom(element) { // Draw room with proper styling this.ctx.fillStyle = element.color + '20'; // Very light fill this.ctx.strokeStyle = element.color; this.ctx.lineWidth = 2; const width = element.endX - element.startX; const height = element.endY - element.startY; // Fill room area this.ctx.fillRect(element.startX, element.startY, width, height); this.ctx.strokeRect(element.startX, element.startY, width, height); // Draw room label if (element.name) { this.drawRoomLabel(element); } // Show area if enabled if (this.canvasManager.showMeasurements && element.area) { this.drawRoomAreaLabel(element); } } // Draw room label drawRoomLabel(element) { const centerX = (element.startX + element.endX) / 2; const centerY = (element.startY + element.endY) / 2; this.ctx.fillStyle = '#333'; this.ctx.font = 'bold 14px Arial'; this.ctx.textAlign = 'center'; this.ctx.fillText(element.name, centerX, centerY - 10); } // Draw room area label drawRoomAreaLabel(element) { const centerX = (element.startX + element.endX) / 2; const centerY = (element.startY + element.endY) / 2; this.ctx.fillStyle = '#666'; this.ctx.font = '10px Arial'; this.ctx.textAlign = 'center'; this.ctx.fillText(`${Math.round(element.area)} sq px`, centerX, centerY + 15); } // Check if point is inside room isPointInRoom(x, y, element) { return x >= Math.min(element.startX, element.endX) && x <= Math.max(element.startX, element.endX) && y >= Math.min(element.startY, element.endY) && y <= Math.max(element.startY, element.endY); } // Update room name updateRoomName(element, newName) { if (element && element.type === 'room') { element.name = newName; return true; } return false; } // Get room properties for UI getRoomProperties(element) { if (element.type !== 'room') return null; return { name: element.name || 'Room', area: Math.round(element.area || 0), dimensions: `${Math.round(Math.abs(element.endX - element.startX))} × ${Math.round(Math.abs(element.endY - element.startY))} px` }; } }