Wege, Ebenen, Stufen und ein Sprung
Deploy App / deploy (push) Successful in 28s

Rueckmeldung Punkt fuer Punkt:

Weg rund ums Haus
- Der Ostweg ist jetzt durchgehend gepflastert von der Verbundstein-
  Anpassung (x 2.86) bis zur Grenze (x 4.45) - vorher 0.83 m breit mit
  Rasenstreifen daneben. Der Weg an der Suedgrenze reicht von der Grenze
  bis an die Nachbarmauer (z 4.49 bis 5.97).
- Winkelelemente Ost auf die Grenzlinie x 4.45; die Linie bei z 4.96 im
  Sueden war keine eigene Stuetzwand, das ist die Nachbarmauer selbst.

Hoehen und Gefaelle
- LEVELS koennen jetzt auch eine geneigte Ebene vorgeben. Die Wege sind
  Rampen: Ostweg rund 12%, Suedweg rund 3%, Feuerwehrzufahrt 13.6% aus
  den Plankoten -2.08 und -1.08. Der Architekturplan nennt an denselben
  Stellen "Steigung 9.9%" und "Steigung 13.0%".
- Ausserhalb der Zonen wird die Interpolation der naechsten Zone
  fortgesetzt statt ihres konstanten Ersatzwerts - die Feuerwehrzufahrt
  stand vorher als schwebende Platte ueber einer Gelaendekante.
- Gelaende oestlich der Grenze korrigiert: dort lag ein Huegel ueber dem
  Weg, obwohl der Plan -0.72 und -1.57 angibt.

Obere Ebene
- Der Rasen ist eben auf -0.02. Die Koten 0.09 bis 0.26 liegen schon im
  angehobenen Kiesbett des Sichtschutzes, nicht mehr im Rasen; ohne feste
  Vorgabe zog die Interpolation den Rasen huegelig hoch.

Stufen
- Beim gedeckten Sitzplatz stimmen jetzt beide schwebenden Platten: der
  Plan zeichnet zwei versetzte Rechtecke mit den Koten -0.02 und -0.17,
  bisher lagen sie auf -0.17 und -0.31 - die untere verschwand im Belag.
- Das Gartentor steht auf dem oberen Niveau (-0.13), von dort zwei Stufen
  hinunter auf den Hauptsitzplatz.
- Westtreppe ueber den ganzen Treppenblock (5 Stufen statt 4), die
  Gelaenderpfosten reichen bis ins Gelaende statt in der Luft zu enden.

Rundgang
- Treppen und schwebende Stufen sind begehbar: ihre Trittflaechen gehen in
  die Hoehenabfrage ein, die Stufen sind kein Hindernis mehr.
- Springen mit der Leertaste, rund 55 cm.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-10 19:49:46 +02:00
co-authored by Claude Opus 5
parent ce40d6275b
commit fad23a34c3
10 changed files with 215 additions and 51 deletions
+20 -6
View File
@@ -1,7 +1,7 @@
/**
* Begehen des Gartens: Maus/Tastatur am Desktop, Joystick und Wischen am Handy.
* Der Spieler folgt dem Gelaende, kann Stufen bis 45 cm ersteigen und wird
* von Mauern, Gebaeuden und Objekten aufgehalten.
* Der Spieler folgt dem Gelaende, kann Stufen bis 45 cm ersteigen, mit der
* Leertaste springen und wird von Mauern, Gebaeuden und Objekten aufgehalten.
*/
import { Euler, PerspectiveCamera, Vector3 } from 'three';
@@ -28,6 +28,9 @@ export interface WalkerOptions {
const SPEED_WALK = 1.65;
const SPEED_RUN = 3.6;
/** Absprunggeschwindigkeit: reicht fuer rund 55 cm Sprunghoehe. */
const JUMP = 3.3;
const GRAVITY = 9.81;
export class Walker {
readonly camera: PerspectiveCamera;
@@ -155,13 +158,24 @@ export class Walker {
this.move(dx, dz);
// Springen: nur vom Boden weg, danach uebernimmt die Schwerkraft.
if (this.keys.has('Space') && this.grounded) {
this.velocityY = JUMP;
this.grounded = false;
}
// Vertikal: dem Gelaende folgen, Absaetze weich abfangen
const ground = this.opts.height(this.pos.x, this.pos.z) + this.opts.eyeHeight;
if (this.pos.y > ground + 0.02) {
this.velocityY -= 9.81 * dt;
if (!this.grounded || this.pos.y > ground + 0.02) {
this.velocityY -= GRAVITY * dt;
this.pos.y += this.velocityY * dt;
if (this.pos.y <= ground) { this.pos.y = ground; this.velocityY = 0; this.grounded = true; }
else this.grounded = false;
if (this.velocityY <= 0 && this.pos.y <= ground) {
this.pos.y = ground;
this.velocityY = 0;
this.grounded = true;
} else {
this.grounded = false;
}
} else {
// sanftes Nachziehen beim Aufsteigen
this.pos.y += (ground - this.pos.y) * Math.min(1, dt * 12);