Atlas: Logistik-Gerüst + Heli-Fix + Waypoints-Regen + Level-Picker
- Neues Modul 'Logistik Europa': module_info-Eintrag, Landing-Card, PHP-Wrapper (logistik.php, modul-logistik.php), Engine-Skelett mit Enums + Helpern (travelCost, latePenalty, Bonus, Dijkstra, Polyline-Interpolation), Test-Harness, Kompetenzen-Draft, 5 Seed-Dateien (locations, vehicle-types, cargo-types, railnet, contract-templates), 3 Level-Einträge in game_levels, Phase 0 durch die Logistik-Instanz geliefert und Atlas-Review bestanden - Heli-Fix: heli-game.php mit BASE_PATH (production-sicher) + Asset-Pfad-Injection, geo_waypoints-Tabelle per Seed-Script auffindbar gemacht - Waypoints-Regen-Tool: regen-waypoints-sql.php synchronisiert waypoints.sql aus DB (70 Einträge) - Design-System: .ggs-level-grid / .ggs-level-card als Standard gepromotet (Klimas Muster, iPad-hover-safe) - Inbox-Nachrichten: Kickoff-Briefings für Heli und Logistik, Asset-Map für Heli, DALL-E-Pipeline-Anleitung, Koordinations- nachrichten an Fluss, Klima, Glossar, Lehrplan Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Logistik Europa — Wrapper
|
||||
* Lädt sims/logistik/game.html und injiziert Base-Path + Seed-Daten.
|
||||
* URL: http://localhost/geograsim/App/logistik
|
||||
*/
|
||||
require_once __DIR__ . '/../php/config/app.php';
|
||||
require_once __DIR__ . '/../php/config/db.php';
|
||||
|
||||
$db = getDB();
|
||||
|
||||
// Module-Info aus DB
|
||||
$mi = $db->query("SELECT title FROM module_info WHERE module_id='logistik'")->fetch(PDO::FETCH_ASSOC);
|
||||
$simName = $mi['title'] ?? 'Logistik Europa';
|
||||
|
||||
// Seed-Dateien aus App/assets/data/ einlesen (werden von Logistik-Instanz gefüllt)
|
||||
$readSeed = function (string $file): string {
|
||||
$path = __DIR__ . '/../assets/data/' . $file;
|
||||
if (!is_file($path)) return '[]';
|
||||
$raw = file_get_contents($path);
|
||||
return $raw !== false && trim($raw) !== '' ? $raw : '[]';
|
||||
};
|
||||
|
||||
$locations = $readSeed('lg-locations.json');
|
||||
$vehicleTypes = $readSeed('lg-vehicle-types.json');
|
||||
$cargoTypes = $readSeed('lg-cargo-types.json');
|
||||
$railnet = $readSeed('lg-railnet.json');
|
||||
$contractTemplates = $readSeed('lg-contract-templates.json');
|
||||
|
||||
// Level-Config aus game_levels (params = JSON). Schema: game_id, level_name, sort_order, params
|
||||
$levels = $db->query("SELECT level_name, sort_order, params FROM game_levels WHERE game_id='logistik' ORDER BY sort_order")->fetchAll(PDO::FETCH_ASSOC);
|
||||
$levelsJson = json_encode(array_map(
|
||||
fn($r) => ['level' => (int)$r['sort_order'], 'name' => $r['level_name'], 'params' => json_decode($r['params'] ?? '{}', true)],
|
||||
$levels
|
||||
), JSON_UNESCAPED_UNICODE);
|
||||
|
||||
$html = file_get_contents(__DIR__ . '/../sims/logistik/game.html');
|
||||
$base = BASE_PATH . '/sims/logistik/';
|
||||
|
||||
$injection = <<<JS
|
||||
window.LOGISTIK_BASE = '{$base}';
|
||||
window.LOGISTIK_SIM_NAME = '{$simName}';
|
||||
window.LOGISTIK_SEEDS = {
|
||||
locations: {$locations},
|
||||
vehicleTypes: {$vehicleTypes},
|
||||
cargoTypes: {$cargoTypes},
|
||||
railnet: {$railnet},
|
||||
contractTemplates: {$contractTemplates}
|
||||
};
|
||||
window.LOGISTIK_LEVELS = {$levelsJson};
|
||||
JS;
|
||||
|
||||
$html = str_replace('/*__LOGISTIK_INJECTION__*/', $injection, $html);
|
||||
echo $html;
|
||||
Reference in New Issue
Block a user