diff --git a/src/components/Island/IslandUniverse.jsx b/src/components/Island/IslandUniverse.jsx index 31daa4e..485562e 100644 --- a/src/components/Island/IslandUniverse.jsx +++ b/src/components/Island/IslandUniverse.jsx @@ -185,6 +185,76 @@ export default function IslandUniverse({ onClose, onIslandClick }) { markers.push({ marker, island, el }); }); + // Add planet markers (positioned in outer ring) + planets.forEach((planet, idx) => { + const angle = (idx / Math.max(planets.length, 1)) * Math.PI * 2; + const radius = 18 + (idx % 3) * 4; + const lng = centerLng + Math.cos(angle) * radius; + const lat = centerLat + Math.sin(angle) * radius; + + const el = document.createElement('div'); + el.className = 'universe-planet-marker'; + + const planetColor = getPlanetColor(planet.theme || 'default'); + const memberCount = planet.member_count || 0; + + el.innerHTML = ` +
+ + + + + + + + + + +
+ 🪐 ${planet.name || 'Planet'} + + ${memberCount} ${t('universe.members')} + +
+
+ `; + + el.addEventListener('mouseenter', () => { + setHoveredIsland({ ...planet, isPlanet: true, username: planet.name }); + }); + el.addEventListener('mouseleave', () => setHoveredIsland(null)); + el.addEventListener('click', (e) => { + e.stopPropagation(); + console.log('[IslandUniverse] Clicked planet:', planet.name); + // TODO: Navigate to planet page when ready + }); + + const marker = new maplibregl.Marker({ element: el, anchor: 'center' }) + .setLngLat([lng, lat]) + .addTo(map); + + markers.push({ marker, planet, el, isPlanet: true }); + }); + markersRef.current = markers; // Slow rotation animation @@ -328,6 +398,22 @@ function getTerrainColor(terrainType) { return palettes[terrainType] || palettes['tropical']; } +/** + * Get planet theme color + */ +function getPlanetColor(theme) { + const palettes = { + 'default': '#9b59b6', + 'tech': '#3498db', + 'gaming': '#e74c3c', + 'music': '#1abc9c', + 'art': '#e91e63', + 'science': '#00bcd4', + 'sports': '#ff9800', + }; + return palettes[theme] || palettes['default']; +} + /** * Generate a detailed island SVG shape (bigger, more features) */