3885c83294
- 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>
55 lines
1.9 KiB
PHP
55 lines
1.9 KiB
PHP
<?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;
|