- Default-Spalte 76 px, nur Icons 60x60 + grüner Ring für owned
- ℹ-Toggle oben → Spalte schiebt sich als Absolute-Overlay auf 280 px
(Desktop-Card-Variante mit Titel/Desc/Badges)
- Tap auf Karte: Bau-Flow + Auto-Collapse zur Icon-Spalte
- Querformat-Hinweis bei Portrait + Touch (📱 Bitte drehen)
- kw-card-detail-overlay (Center-Modal) entfernt — Thomas wollte das nicht
- viewport-fit=cover + dvh + safe-area schon vorher drin
Thomas möchte teacher.html-Tab "Ergebnisse" um Modul-Filter, Modul-
spezifische Spalten, Game-Over-Indikator und Fleiß-Übersicht erweitern.
Cross-modulare Lehrer-Seite → Atlas-Territorium. Ich liefere den
Klima-Block fertig:
- 12 entscheidende Erfolgs-Parameter mit JSON-Pfad in `results`
- Game-Over-Erkennung + Icon-Mapping (🏆/💸/🌊/🌫/🌡/⏸)
- Hinweis auf 2D/3D-Varianten-Trennung (optional)
- Fleiß-SQL-Skizze für duration_ms-Aggregation
Engine sendet alle Felder bereits — Atlas kann die JSON direkt parsen,
keine Modul-seitige Änderung nötig.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Keine pending Klima-Datei-Änderungen mehr. Mailbox seit 23.04. nicht
neu beschrieben. Atlas-Antwort liegt verarbeitet vor, Integrations-
Umbau wartet weiter auf Thomas-Go.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sicherheits-Commit, damit der Stand vor möglichem Shutdown gesichert
ist. App/pages/klima-2d.php war noch untracked, jetzt im Repo.
Restliche modified-Markierungen waren reine Line-Ending-Normalisierung.
Externer Plattform-Sweep hat in allen Klima-HTML-Files iPad-spezifische
Polish-Änderungen ergänzt:
- viewport-fit=cover in 2D / 3D / preview-sounds (Notch-Handling)
- 100dvh statt 100vh in plane-test + preview-sounds (dynamic viewport)
- Cockpit-Link in 3D-Endscreen auf '../../schueler' präzisiert
Inhaltlich keine Modul-Änderung von mir, nur Sicherung der externen
Edits, damit nichts verloren geht.
_status.md auf bereit-warte-auf-go gesetzt — Atlas-Antwort vom 23.04.
liegt vor (alle 6 Fragen beantwortet, End-Screen-Komponente verfügbar,
2D+3D parallel umbauen, Sammel-Commit-Subject vorgegeben). Klima-
Instanz ist arbeitsbereit, wartet auf Thomas-Go fürs Loslegen.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- lehrplan.php liest jetzt den Query-Parameter ?module=<id> und
filtert die Kompetenz-Cards auf die dem Modul zugeordneten
Eintraege (via kompetenz_modules)
- Modul-Fokus-Banner ueber dem Hero: Icon, Titel, "Zurueck zur
Simulation"-Link, "Alle Module anzeigen"-Link
- Hero-Titel + Meta-Description + <title>-Tag spiegeln den Fokus
- Ungueltige Modul-Slugs fallen stillschweigend auf Full-View zurueck
- Alle bestehenden Filter (country, theme) wirken weiterhin
gleichzeitig
Use-Case: Atlas' Template-Button 📚 Lehrplan in den Sim-Wrappern
zeigt aktuell auf /modul-<id>#lehrplan-bezug. Diese Seite dient als
Alternative/Fallback, falls jemand direkt auf lehrplan.php?module=X
landet.
Verifiziert:
- lehrplan?module=logistik 6 Kompetenzen (von 10)
- lehrplan?module=klima 1 Kompetenz
- lehrplan?module=fluss 2 Kompetenzen (Naturgefahren + Stadt)
- lehrplan?module=unknown 10 Kompetenzen (Full-View Fallback)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Sonderfall im Partial fuer MODULE_ID=klima: zwei CTAs
"2D starten" (primary) + "3D starten" (secondary), beide mit
level=1 als Default
- WebGL-Hinweistext unter den CTAs (dezent, iPad Gen 8 als Schwelle,
2D didaktisch identisch empfohlen)
- .md-device-hint CSS: fjord-Akzent, max-width 560px, 14px
Andere Module unveraendert — Single-CTA-Pfad bleibt Default.
Atlas' 19.04.-Toggle-Auftrag erledigt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Logistik + Heli Wrappers von den Instanzen umgebaut:
- Mode-Check (free/teacher_started/locked) direkt aus DB
- Forced-Level-Start bei teacher_started
- Easy-Flag aus students.easy_language
- Locked-Seite mit Sperrhinweis + Cockpit-Link
- Assessment-Calls (started/running/completed) in Heli game.html
Atlas-Arbeit:
- teacher.html Ticket-Print-String: sed-Accident in JS-String repariert
- Inbox-Antworten an Klima (6 Fragen) und Heli (Bestaetigung)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- modul-regenwald.php, modul-erdbeben.php, modul-energiemix.php,
modul-lieferketten.php, modul-logistik.php (alle status=geplant)
- modul-klima-3d.php (aktiv, Atlas' Admin-Eintrag)
- Alle als 3-Zeilen-Wrapper auf dem gemeinsamen Partial
- Status-'geplant' zeigt automatisch Vorschau-Banner
("Modul ist noch in Entwicklung, Inhalte werden ergaenzt")
- Lehrplan-Bezug + Glossar-Chips + Metadaten sind sofort verfuegbar,
sobald Atlas' Admin-UI die Prosa befuellt
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- App/version.json mit Commit-SHA + Build-Datum
- App/assets/js/version-tag.js — rendert kleines Tag rechts unten
- Eingebunden in schueler, teacher, index, login, admin, profil
- Ermoeglicht Vergleich lokal vs. geograsim.at auf einen Blick
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Hart gesetztes RewriteBase /geograsim/App/ funktioniert nur lokal,
fuehrt auf der eigenen Domain geograsim.at zum Endlos-Redirect-Loop
(AH00124: 10 internal redirects). Ohne RewriteBase nutzt Apache den
Request-Pfad automatisch — funktioniert fuer alle drei Deploy-Ziele:
localhost/geograsim/App, staatsgeheimnis.at/geograsim, geograsim.at.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- _inbox/zentrale/2026-04-19-2200-klima-3d-v2-abschlussprotokoll.md:
vollständiges Abschlussprotokoll an Atlas mit Feature-Liste,
Commit-Kette, offenen Punkten (nicht von mir abhängig) und
Ideen-Ausblick für spätere Weiterentwicklungen.
- _status.md: session-geschlossen-Marker gesetzt, Verweis auf
Abschlussprotokoll.
- _inbox/glossar/2026-04-19-2130: status auf gelesen aktualisiert
(Atlas hat den Hinweis gesehen).
Klima-Instanz wartet bis zum nächsten Aktivierungs-Impuls.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- beachLifeCount(): base 8 + 14 wenn state.tourismMode + 4 pro Airport,
gedeckelt bei 40. Skaliert die Anzahl der Strandleben-Elemente an
die Tourismus-Aktivität (mehr Tourismus = mehr Menschen am Strand).
syncBeachLife() wird pro Frame gerufen, rebuildt aber nur, wenn sich
die Zahl wirklich geändert hat (O(1) Check bei Stabilität).
- Radwege: zurück zu gestrichelter Mittellinie (5 Striche × Periode
0.28). BIKE_SPACING auf exakt BIKE_LENGTH (1.4) gesetzt (vorher
0.92·BIKE_LENGTH), damit die Dashes nahtlos über Segment-Grenzen
weiterlaufen — Strich des nächsten Segments landet genau dort, wo
die Dash-Periode des vorherigen weitergeht.
- Ausrichtung bleibt via coastRotation: Radwege folgen weiter der
gleichen Ellipsen-Tangente wie das grüne Zone-Overlay beim
Platzieren, sind also parallel zur Küstenkurve.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Strandleben: 22 Stellen (vorher 12), fünf Typen statt drei:
Figur, Sonnenschirm, Handtuch, Liegestuhl (neu), Hund (neu).
Positionen über gleichmäßiges Winkel-Raster mit Jitter, damit die
Elemente rundum verteilt sitzen statt zufällig zusammen zu klumpen.
- makeBeachChair: angeschrägte Rückenlehne + Sitz + vier Beine in
wechselnder Stoff-Farbe.
- makeBeachDog: Körper + Kopf + Schnauze + Schwanz + vier Beinchen +
Ohren in zufälliger Fell-Farbe.
- _status.md: auf finalen V2-Stand überschrieben
- _inbox/zentrale/2026-04-19-2130-klima-3d-v2-abschluss.md: Bericht an
Atlas mit vollständiger Feature-Liste
- _inbox/zentrale/2026-04-19-2135-klima-3d-v2-lehrplan-nachtrag.md:
Nachtrag an Lehrplan (Modul-Detailseite um 2D/3D-Launcher erweitern)
- _inbox/glossar/2026-04-19-2130-klima-3d-v2-info-topics.md: Info an
Glossar (17 view-lokale INFO_TOPICS, keine DB-Änderung nötig)
3D V2 ist einsatzbereit — Thomas schließt heute ab, strukturierter
Browser-Regression-Test folgt in späterer Session.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Runway-Ausrichtung: coastRotation(airport.x, airport.z) statt
atan2(-dz, dx). Runway läuft jetzt parallel zur Küste an der
Airport-Position, also im rechten Winkel zur Radialen Richtung
Vulkan. Flug geht parallel am Vulkan vorbei, nicht durch ihn.
Greift in finalizeBuy und im syncMeasureMeshes-Force-Override.
- RUNWAY_Y von 0.50 auf 0.78 korrigiert: Plane-Räder stehen jetzt
exakt auf der Asphalt-Oberkante (airport.y + 0.56 Runway-Top +
0.22 Wheel-Offset = 0.78). Versank vorher sichtbar in der Bahn.
- Plane-Zyklus: neue Phasen, damit das Flugzeug nach der Landung
sichtbar bleibt statt zu verschwinden.
0-14: Parken am -X-Ende, Nase +X (sichtbar)
14-18: Takeoff +X
18-26: Climb-Out +X, Banking am Ende
26-76: unsichtbar (50 s Flugrunde)
76-84: Approach aus +X-Ferne, Nase -X
84-88: Landing-Roll +X → -X
88-92: Wenden am -X-Ende (Yaw-Interpolation π → 0)
92-110: Parken am -X-Ende, Nase +X (sichtbar, steht bereit)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Strandleben (beachLifeGroup): 12 winzige Figuren / Sonnenschirme /
Strandhandtücher am Küstenband (Terrain 0.20..0.55), Scale 0.55..0.90.
makeBeachFigure / makeBeachUmbrella / makeBeachTowel; buildBeachLife
wird von startGame und deserializeState gerufen.
- Radwege: 5 einzelne Stripes durch EINE durchgehende weiße Mittellinie
ersetzt (Box 1.4×0.006×0.05). Bei snap-Spacing 0.92 × BIKE_LENGTH
überlappen sich die Mittellinien benachbarter Segmente zu einer
visuell kontinuierlichen Linie entlang der Küstenbiegung.
- syncMeasureMeshes erzwingt für Airport-Meshes jetzt IMMER die
away-from-volcano-Rotation (auch für alte Saves, die noch mit
zufälliger Rotation gespeichert wurden). inst.rotation wird dabei
korrigiert, damit spätere Saves konsistent sind.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Aus plane-test.html-Kalibrierung bestätigt: Flugzeug soll Nase in
airport-lokalem +X halten, Bewegung in +X. updateSinglePlane
komplett neu:
- Parken am -X-Ende der Runway (vorher +X)
- Takeoff rollt -X → +X (vom Vulkan weg, da airport.rotation.y =
atan2(-dz, dx) das +X in die Away-Richtung dreht)
- Climb-Out in +X-Richtung
- Ab der zweiten Climb-Hälfte bankt es leicht (rotation.z wächst)
zeigt Seitwärts-Kippen in die Kurve bevor es verschwindet
- Approach kommt aus -X-Ferne zurück, Banking löst sich auf
- Landung in +X-Richtung (wie Takeoff)
- Taxi zurück zur Parkposition: unsichtbar (Teleport OK)
Nase-Ausrichtung: rotation.y = airport.rotation.y (kein π-Offset mehr
— entspricht der Test-Seite). Pitch für Start/Landung, Roll für
Kurvenmanöver.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Neue Datei: App/sims/klima/plane-test.html
Three.js-Sandbox mit dem makePlane-Mesh, Slidern für rotation.x/y/z,
Achsen-Helper (X rot, Y grün, Z blau), großem roten Pfeil als
Bewegungsrichtung (+X), "Flug simulieren"-Button und "Werte kopieren".
Thomas kann damit die korrekte Flug-Rotation finden und zurückmelden.
- Airport-Ausrichtung: finalizeBuy überschreibt die zufällige
placementRotation bei id='airport' mit atan2(-dz, dx) zum Vulkan —
Runway (lokales +X) zeigt nun IMMER vom Vulkan weg, Start und
Landung über Ozean statt Bergflanke.
- airportLocalToWorld: Vorzeichen an Three.js-Konvention angeglichen
(x_w += lz·sinR, z_w -= lx·sinR), damit rotierte Airports ihre
internen Offsets korrekt in Welt-Koordinaten übertragen.
- Plane-Zyklus: +60 s Grund-Offset entfernt, Flugzeug ist bei
Airport-Bau sofort sichtbar (Phase 0 = parken auf der Runway).
Test-URL: http://localhost/geograsim/App/sims/klima/plane-test.html
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- ggsMusicResetToDefault: neuer Helper springt auf den ersten Track im
Dropdown. Wird in startGame aufgerufen, damit Drama-Musik aus dem
Endscreen eines vorherigen Durchgangs nicht ins neue Level hinüber-
läuft (erklärt, warum 'Drama im laufenden Spiel' lief).
- camera.lookAt: von (0, 0.5, 0) auf (0, 2.8, 0) angehoben → Insel
rutscht im Bild ~10 % nach unten, oben mehr Himmel/Dunst-Wolken.
- Drohnen-Toggle 🚁 im Header: neuer droneEnabled-Flag. Aus =
Auto-Orbit ist dauerhaft gestoppt (nur Maus-Drag bewegt Kamera).
Ein = Idle-Timeout resumed wie bisher. Button zeigt aktiven
Zustand über opacity + .active-Klasse.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Airport-Fahrzeuge: pro Flughafen eigener Heli + Flugzeug, in
airportVehicles-Map verwaltet, über syncMeasureMeshes mit-synchronisiert.
Phasen-Offsets per Airport-Index, damit mehrere Flughäfen nicht
synchron laufen.
- Heli: landet jetzt korrekt auf dem H (padLocal aus userData statt
hardcoded, inkl. LIFT-Korrektur). Alle ~3 Zyklen (deterministisch)
Vulkan-Runde statt Airport-Kreis — Radius 9 um VOLCANO_X/Z.
- Flugzeug (makePlane, low-poly Cessna): 110-s-Zyklus — parkt am
Runway-Anfang, Takeoff-Roll, Climb-Out nach -X, 50 s unsichtbar
(Reise), Approach, Landing-Roll, Taxi. Propeller dreht.
- Wolken: Höhe auf ~7 abgesenkt (Vulkan-Gletscher-Höhe), fühlen sich
jetzt wie Dunst um den Kegel an statt Himmels-Schleier.
- Flut-Tönung: applyFloodTintAll lerpt Material-Farben aller Mesh-
Füße, die unter ocean.position.y liegen, Richtung Dunkelgrau und
kippt sie bis 0.12 rad. Wirkt auf Maßnahmen + Dorf + Citizen-Strand.
- Graph-Top = verloren: neu endLevel(false, 'co2-top' | 'temp-top')
wenn state.co2Ppm ≥ 700 oder state.currentTemp ≥ 19. Endscreen
bekommt passende Icons (🌫 / 🌡) und Titel.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Blackout fällt Bäume jetzt sichtbar: Baum kippt um (easeOut), Totenkopf
erscheint nach 1.8 s darüber, nach 3.2 s fadet alles weg. Animation
hängt an state.animMs → Pause friert ein. Totenkopf als Canvas-Texture
auf einem Billboard-Plane.
- simulateTick vergleicht Forest-Count vor/nach engine.tick; orphaned
Meshes werden aus placedMeshes gepullt und an fallenTrees übergeben,
damit syncMeasureMeshes sie nicht voreilig entfernt.
- Toast-Card pro Tick mit Holz-Fäll-Meldung (🪓 'Bewohner:innen fällen N
Bäume zum Heizen'), klickbar auf INFO_TOPICS.blackout.
- Solaranlage-Kauf: Toast mit Strom-Leistung (+1 MW) und Wartung
(2 Mio €/Jahr), analog zum Gründach-Hinweis.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Wolken am Himmel: 4 Dunst-Gruppen (je 3-5 Kugeln, transluzent), ziehen
vom +X Rand über die Insel Richtung Vulkan (−X, −Z-Drift). Eigene
Phase, Höhe, Zyklusdauer pro Wolke. updateClouds in updateAmbient.
- Airport-Plateau: von 3.4×1.55 auf 2.55×1.25 geschrumpft, nach +Z
versetzt (0.28). Endet knapp innerhalb der Runway, deckt aber
Terminal + Heli-Pad weiter ab.
- Pause-Zentrum: neue Card mit ▶-Symbol in der Mitte der Szene, sichtbar
bei state.speed === 0. Klick startet 1×-Speed. Glas-Optik, animation
bei Einblendung. Sync via updatePauseCenter in renderUI und bei jedem
Speed-Klick.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Jede Maßnahme hebt engine-seitig die Population-Obergrenze um 5 % der
Start-Bevölkerung (computePopulationGrowth.capBonus). Beim Gründach
machen wir das didaktisch explizit sichtbar: Toast-Card beim Kauf weist
auf neue Wohnungen, zuziehende Einwohner:innen und Touristen + höhere
Steuer-Einnahmen hin. infoKey=green_roof_info macht die Karte klickbar.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Radwege: snappen an bestehende Pfade an (Distanz 2.2, Spacing 92 %,
leicht überlappend). Rotation am NEUEN Mittelpunkt via coastRotation,
Kette folgt so der Küstenbiegung statt starre Linie.
- Start-Wald: 3 Bäume bei startGame pre-seeded (forest.instances mit
starter-Flag). Engine-Blackout-Logik fällt sie bei Stromausfall.
Toast 'Du startest mit 3 Bäumen ...' am Level-Start, klickbar auf
INFO_TOPICS.blackout.
- updateCrisisMusic: Edge-Detection pro Kriterium (Budget/Temp/Flood),
jeweils Toast-Card beim Übergang ins Kritische. Merker in startGame
zurückgesetzt.
- Airport: Plateau-Sockel (3.4×0.20×1.55 + dünne helle Oberkante), alle
Bauten um LIFT=0.24 angehoben. Hebt Airport sichtbar aus dem Terrain,
kein Versinken am Hang mehr. Heli-Pad-Offset folgt nach.
- Sand-Aufschüttung (Bau-Maßnahme): zurück zum reinen Lathe-Kegel
(Plattform + Gras raus). Kleiner, zurückhaltender Sand-Hügel wie
ursprünglich V1.
- Citizen-Event 'Strand aufschütten' (citizen-tourism): neuer
syncCitizenBeach → breiter flacher Sand-Streifen vorne am Ufer,
parallel zur Küste. Nur sichtbar wenn state.hasSandBeach gesetzt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Der Windrad-Höhenslider war redundant mit der bestehenden
windrad-groessenvergleich.svg, die denselben Sachverhalt als
statische Vergleichsgrafik bereits zeigt. Entsprechend aus der
Registry und dem Code entfernt.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Treibhauseffekt-Slider (CO2-ppm 200..800 -> Temperatur-Anomalie via IPCC-Faustformel, Moleküle füllen Atmosphäre dynamisch, Thermometer visualisiert ΔT)
- Windrad-Höhenslider (0..260 m, 7 Vergleichsobjekte Mensch..modernes Windrad leuchten je nach Schieberstellung auf)
- Methan-GWP-Waage (CO2-Schale variabel 1..60 kg, Waage kippt physikalisch bis bei 28 kg Balance erreicht ist)
- kWh-Rennen: Fahrzeuge fahren jetzt von rechts nach links (plattformunabhängige Emoji-Orientierung), Animation auf 6,5s verlangsamt
- Watt-Leiter: neue gemeinsame Infografik (log-Skala 1 W..1 GW mit 6 Haushalts- und Kraftwerks-Beispielen), verknüpft mit watt/kilowatt/megawatt
- CSS für Slider-Experimente (.ge-gh-*), Waagen-Animation, Windrad-Highlighting
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Nachricht an Atlas: kompletter Code-Block pro FREE-Sim-Card mit
Card-Split "Mehr erfahren"/"Sofort probieren" inkl. CSS, plus
Muster für LOCKED-Cards
- Nachricht an Glossar: Begriffs-Wunschliste für Fluss (Priorität 1),
Heli (Priorität 2), Stadt (Priorität 3), später geplante Module
- _status.md: Arbeitsblock-Abschluss dokumentiert