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:
+20
-6
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user