Verbesserung der Fahrzeug-Logik im Taxi-Spiel

Änderungen:
- Implementierung einer Wartezeit von 1 Sekunde, bevor ein gestopptes Auto wieder fahren darf, um realistischere Bewegungen zu ermöglichen.
- Anpassung der Distanzprüfung für das Wiederanfahren von Autos, um die Interaktion mit dem Taxi zu optimieren.
- Entfernung der Rückwärtsbewegung bei Kollisionen mit stehenden Taxis, um das Verhalten zu vereinheitlichen.
- Hinzufügen eines Zeitstempels für den Stopp eines Autos zur besseren Nachverfolgbarkeit.

Diese Anpassungen verbessern die Fahrzeuginteraktion und die Kollisionserkennung im Spiel.
This commit is contained in:
Torsten Schulz (local)
2025-10-20 18:38:25 +02:00
parent 17d5f33e8d
commit 70020668e4

View File

@@ -1973,19 +1973,23 @@ export default {
updateCarMovement(car) {
// Wenn das Auto gestoppt ist (nach Kollision mit stehendem Taxi), prüfe ob Taxi weg ist
if (car.isStopped) {
// Prüfe ob das Taxi noch in der Nähe ist (Kollisionsabstand + 50px Puffer)
// Mindestens 1 Sekunde warten, bevor das Auto wieder fahren darf
const now = Date.now();
const minWaitTime = 1000; // 1 Sekunde
if (car.stopTime && (now - car.stopTime) < minWaitTime) {
return; // Noch nicht lange genug gestoppt
}
// Prüfe ob das Taxi noch in der Nähe ist
const distance = Math.sqrt(
Math.pow(car.x - this.taxi.x, 2) + Math.pow(car.y - this.taxi.y, 2)
);
const collisionDistance = 80; // Etwa die Größe der Kollisionsboxen
console.log(`Auto ${car.id} gestoppt - Distanz zum Taxi: ${distance.toFixed(1)}px`);
if (distance > 30) {
if (distance > 40) {
// Taxi ist weg - Auto kann wieder fahren
car.isStopped = false;
car.speed = car.originalSpeed || 0.5; // Ursprüngliche Geschwindigkeit wiederherstellen
console.log(`Auto ${car.id} kann wieder fahren - Taxi ist weg (Distanz: ${distance.toFixed(1)}px)`);
}
return;
}
@@ -3011,22 +3015,10 @@ export default {
handleCarTaxiCollision(car) {
// Wenn das Taxi steht (speed = 0), soll das Auto zurückfahren und stehen bleiben
if (Math.abs(this.taxi.speed) < 0.1) {
// Auto 10 Pixel zurückfahren in entgegengesetzter Richtung
const backDistance = 10;
if (car.direction === 'up') {
car.y += backDistance;
} else if (car.direction === 'down') {
car.y -= backDistance;
} else if (car.direction === 'left') {
car.x += backDistance;
} else if (car.direction === 'right') {
car.x -= backDistance;
}
// Auto zum Stehen bringen
// Auto zum Stehen bringen OHNE Zurücksetzen
car.speed = 0;
car.isStopped = true;
car.stopTime = Date.now(); // Zeitpunkt des Stopps merken
console.log(`Auto ${car.id} ist mit stehendem Taxi kollidiert und steht jetzt`);
} else {
@@ -3706,13 +3698,6 @@ export default {
// Zeichne Autos
this.drawCars();
// Debug: Kollision-Overlays zeichnen (falls vorhanden)
if (this._collisionDebug && this._collisionDebug.ttl > 0) {
const dbg = this._collisionDebug;
this._drawDebugPoly(dbg.aCorners, 'rgba(255,0,0,0.35)', '#ff0000');
this._drawDebugPoly(dbg.bCorners, 'rgba(0,128,255,0.35)', '#0080ff');
dbg.ttl -= 1;
}
// Zeichne Taxi
this.ctx.save();