1e51ef7def
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
110 lines
3.8 KiB
PHP
110 lines
3.8 KiB
PHP
<?php
|
||
/**
|
||
* Baut sims/heli/scripts/wp-geo-lines.json fuer den Audio-Generator.
|
||
* Liest pro Mission-Wegpunkt einen kurzen Text:
|
||
* 1. Bevorzugt geo_waypoint_facts.text_de (kind='geo', display_order ASC)
|
||
* 2. Fallback: geo_waypoints.info
|
||
* 3. Letzter Fallback: nur der Name
|
||
*
|
||
* Aufruf via Browser:
|
||
* http://localhost/geograsim/App/php/build-wp-geo-lines.php
|
||
*/
|
||
require_once __DIR__ . '/config/db.php';
|
||
|
||
header('Content-Type: text/plain; charset=utf-8');
|
||
$db = getDB();
|
||
|
||
// Alle Wegpunkte aus den 25 Missionen (Spiegel zu ALL_MISSIONS in game.html).
|
||
// Doubletten werden per array_unique entfernt.
|
||
$missionWaypoints = [
|
||
// Vorarlberg
|
||
'nenzing','thueringen','zwischenwasser','damuels','bergrettung_muels',
|
||
'feldkirch','rankweil','verkehr_a14',
|
||
'buers','brand',
|
||
'dornbirn','bregenz',
|
||
'egg','bezau','mellau',
|
||
'bludenz','schruns','stgallenk','gaschurn',
|
||
// Tirol
|
||
'innsbruck','telfs','oetz','soelden','skiunfall_soelden',
|
||
'hall','schwaz','jenbach','woergl','kufstein',
|
||
'zell_ziller','mayrhofen',
|
||
// Wien
|
||
'wien_c9','wien','moedling','baden','verkehr_a2_baden',
|
||
'wien_donau','see_donau_wien',
|
||
// Niederoesterreich
|
||
'wr_neustadt_c3','wr_neustadt','puchberg','schneeberg','berg_schneeberg',
|
||
'rax','berg_rax',
|
||
// Burgenland
|
||
'oberwart_c16','mattersburg','eisenstadt','podersdorf','see_neusiedl',
|
||
// Oberoesterreich
|
||
'linz_c10','wels','sattledt','verkehr_a1_sattledt',
|
||
'gmunden','traunsee','see_traun',
|
||
// Salzburg
|
||
'salzburg_c6','hallein','golling','flachau','verkehr_a10_tauern',
|
||
'st_wolfgang','see_wolfgang',
|
||
'zell_see','kaprun','heiligenblut','grossglockner','berg_glockner',
|
||
// Steiermark
|
||
'niederoeblarn_c14','bad_aussee','dachstein','berg_dachstein',
|
||
'graz_c12','bruck_mur','hochschwab','berg_hochschwab',
|
||
'leoben','verkehr_a9_pyhrn',
|
||
// Kaernten
|
||
'klagenfurt_c11','klagenfurt','poertschach','see_woerth',
|
||
'villach','spittal',
|
||
'verkehr_a2_klagenfurt',
|
||
];
|
||
$missionWaypoints = array_values(array_unique($missionWaypoints));
|
||
|
||
// Wegpunkt-Stammdaten + Geo-Facts laden
|
||
$inList = implode(',', array_fill(0, count($missionWaypoints), '?'));
|
||
$wpStmt = $db->prepare("SELECT wp_key, name, info FROM geo_waypoints WHERE wp_key IN ($inList)");
|
||
$wpStmt->execute($missionWaypoints);
|
||
$wps = [];
|
||
foreach ($wpStmt as $row) $wps[$row['wp_key']] = $row;
|
||
|
||
$factsByKey = [];
|
||
try {
|
||
$factStmt = $db->prepare("SELECT wp_key, text_de FROM geo_waypoint_facts
|
||
WHERE kind = 'geo' AND wp_key IN ($inList)
|
||
ORDER BY wp_key, display_order ASC");
|
||
$factStmt->execute($missionWaypoints);
|
||
foreach ($factStmt as $row) {
|
||
$factsByKey[$row['wp_key']][] = $row['text_de'];
|
||
}
|
||
} catch (Exception $e) {
|
||
echo "WARN: geo_waypoint_facts fehlt — fallback nur info/name\n";
|
||
}
|
||
|
||
$lines = [];
|
||
$missing = [];
|
||
foreach ($missionWaypoints as $key) {
|
||
$wp = $wps[$key] ?? null;
|
||
if (!$wp) { $missing[] = $key; continue; }
|
||
$name = $wp['name'];
|
||
$text = '';
|
||
if (!empty($factsByKey[$key])) {
|
||
// 1–2 erste Geo-Facts nehmen, mit Name als Lead
|
||
$facts = array_slice($factsByKey[$key], 0, 2);
|
||
$text = $name . '. ' . implode(' ', $facts);
|
||
} elseif (!empty($wp['info'])) {
|
||
$text = $name . '. ' . $wp['info'];
|
||
} else {
|
||
$text = $name . '.';
|
||
}
|
||
$lines[] = [
|
||
'id' => 'r_wp_geo_' . $key,
|
||
'text' => $text,
|
||
];
|
||
}
|
||
|
||
$out = [
|
||
'_note' => 'Wegpunkt-Geografie fuer die Plan-Phase. Spielt waehrend der Bearbeiter den jeweils gesuchten Wegpunkt sucht.',
|
||
'lines' => $lines,
|
||
];
|
||
|
||
$path = __DIR__ . '/../sims/heli/scripts/wp-geo-lines.json';
|
||
file_put_contents($path, json_encode($out, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
|
||
|
||
echo "Geschrieben: $path\n";
|
||
echo "Zeilen: " . count($lines) . "\n";
|
||
if ($missing) echo "Fehlende wp_keys (nicht in DB): " . implode(', ', $missing) . "\n";
|