query("SELECT * FROM celestial_object_statuses ORDER BY id")->fetchAll(); $statuses_map = []; foreach($statuses_db as $s) $statuses_map[$s['id']] = $s; $object_types_db = $db->query("SELECT * FROM celestial_object_types ORDER BY id")->fetchAll(); $object_types_map = []; foreach($object_types_db as $ot) $object_types_map[$ot['slug']] = $ot; $factions_db = $db->query("SELECT * FROM factions ORDER BY id")->fetchAll(); $factions_map = []; foreach($factions_db as $f) $factions_map[$f['id']] = $f; function getStatusColor($status_id, $map) { return $map[$status_id]['color'] ?? '#fff'; } $sector_data = []; $grid = array_fill(1, $grid_size, null); $active_sectors = $db->query("SELECT DISTINCT sector_id FROM planets WHERE galaxy_id = $galaxy_id")->fetchAll(PDO::FETCH_COLUMN); if ($view === 'sector') { $stmt = $db->prepare("SELECT p.*, cot.orbital_control_enabled, cot.terrestrial_control_enabled FROM planets p LEFT JOIN celestial_object_types cot ON p.type = cot.slug WHERE galaxy_id = ? AND sector_id = ? AND slot BETWEEN 1 AND ?"); $stmt->execute([$galaxy_id, $sector_id, $grid_size]); $objects_raw = $stmt->fetchAll(); $grid = array_fill(1, $grid_size, null); $planet_ids = []; foreach ($objects_raw as $obj) { $grid[$obj['slot']] = $obj; $planet_ids[] = $obj['id']; $grid[$obj['slot']]['cities'] = []; $grid[$obj['slot']]['orbital_controls'] = []; $grid[$obj['slot']]['terrestrial_controls'] = []; } if (!empty($planet_ids)) { $placeholders = implode(',', array_fill(0, count($planet_ids), '?')); // Fetch Orbital Controls $stmt = $db->prepare("SELECT * FROM planet_faction_control WHERE planet_id IN ($placeholders)"); $stmt->execute($planet_ids); $orb_controls_raw = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($orb_controls_raw as $ocr) { foreach ($grid as &$slot_data) { if ($slot_data && $slot_data['id'] == $ocr['planet_id']) { $slot_data['orbital_controls'][$ocr['faction_id']] = $ocr['control_level']; } } } // Fetch Terrestrial Controls $stmt = $db->prepare("SELECT * FROM planet_terrestrial_control WHERE planet_id IN ($placeholders)"); $stmt->execute($planet_ids); $terr_controls_raw = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($terr_controls_raw as $tcr) { foreach ($grid as &$slot_data) { if ($slot_data && $slot_data['id'] == $tcr['planet_id']) { $slot_data['terrestrial_controls'][$tcr['faction_id']] = $tcr['control_level']; } } } // Fetch Cities unset($slot_data); $stmt = $db->prepare("SELECT c.*, st.name as type_name FROM cities c LEFT JOIN settlement_types st ON c.settlement_type_id = st.id WHERE c.planet_id IN ($placeholders)"); $stmt->execute($planet_ids); $cities_raw = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($cities_raw as $city) { foreach ($grid as &$slot_data) { if ($slot_data && $slot_data['id'] == $city['planet_id']) { $slot_data['cities'][] = $city; } } } } } else { $all_planets = $db->query("SELECT sector_id, slot, status FROM planets WHERE galaxy_id = $galaxy_id")->fetchAll(PDO::FETCH_ASSOC); foreach($all_planets as $p) { $sector_data[$p['sector_id']][$p['slot']] = $p; } } // SEO Tags $page_title = "Galaxy Map - Flatlogic Game"; if ($view === 'sector') $page_title = "Sector $sector_id - Galaxy Map"; $page_desc = "Explore the galaxy, monitor faction control and planetary settlements in this deep space simulation."; ?> <?php echo $page_title; ?>
100]; foreach($orb as $fid => $lvl): $c = $factions_map[$fid]['color'] ?? '#88c0d0'; ?>
100]; foreach($terr as $fid => $lvl): $c = $factions_map[$fid]['color'] ?? '#a3be8c'; ?>