diff --git a/frontend/src/views/minigames/TaxiGame.vue b/frontend/src/views/minigames/TaxiGame.vue
index e18b2eb..ce6bd28 100644
--- a/frontend/src/views/minigames/TaxiGame.vue
+++ b/frontend/src/views/minigames/TaxiGame.vue
@@ -34,27 +34,12 @@
← A
Links lenken
-
- S
- Passagier aufnehmen
-
-
- Q
- Passagier absetzen
-
-
- Enter
- Tanken
-
Ziele
- - Fahre zu grünen Markierungen um Passagiere aufzunehmen
- - Fahre zu roten Markierungen um Passagiere abzuliefern
- - Gelbe Markierungen sind Tankstellen
- Vermeide Kollisionen mit anderen Fahrzeugen
@@ -207,6 +192,8 @@ export default {
gameLoop: null,
lastSpeedChange: 0,
speedChangeInterval: 100, // 200ms = 0.2 Sekunden
+ lastSteerChange: 0,
+ steeringBaseInterval: 300, // Basisintervall in ms bei sehr niedriger Geschwindigkeit
canvas: null,
ctx: null,
minimapCanvas: null,
@@ -470,21 +457,36 @@ export default {
}
}
- // Lenkung - abhängig von der Geschwindigkeit
- const baseSteeringSpeed = 0.07; // Basis-Lenkgeschwindigkeit für 20 km/h (Stufe 4)
- const currentSpeedLevel = this.taxi.speed; // 0-24 (entspricht 0-120 km/h)
- const steeringSpeed = baseSteeringSpeed * (currentSpeedLevel / 4); // Skaliert auf Stufe 4
-
- if (this.keys['ArrowLeft'] || this.keys['a'] || this.keys['A']) {
- this.taxi.angle -= steeringSpeed;
- }
- if (this.keys['ArrowRight'] || this.keys['d'] || this.keys['D']) {
- this.taxi.angle += steeringSpeed;
+ // Lenkung in diskreten 11,25°-Schritten mit geschwindigkeitsabhängiger Verzögerung
+ const steeringAngle = Math.PI / 16; // 11,25°
+ const speedLevel = this.taxi.speed; // 0..24 (5 km/h je Stufe)
+ // Nicht-lineare Beschleunigung der Eingabe: schneller bei hoher Geschwindigkeit
+ const minInterval = 4; // schnellste Annahme (ms) - erneut halbiert
+ const maxInterval = 60; // langsamste Annahme (ms) - erneut halbiert
+ const factor = Math.pow(speedLevel / this.taxi.maxSpeed, 1.5); // 0..1, gewichtet
+ const steeringInterval = Math.max(minInterval, maxInterval - (maxInterval - minInterval) * factor);
+
+ // Richtung bestimmen (-1 links, +1 rechts)
+ let steerDir = 0;
+ if (this.keys['ArrowLeft'] || this.keys['a'] || this.keys['A']) steerDir = -1;
+ if (this.keys['ArrowRight'] || this.keys['d'] || this.keys['D']) steerDir = steerDir === -1 ? 0 : 1; // beide gedrückt -> neutral
+
+ if (steerDir !== 0) {
+ const elapsed = currentTime - this.lastSteerChange;
+ const steps = Math.floor(elapsed / steeringInterval);
+ if (steps > 0) {
+ this.taxi.angle += steerDir * steeringAngle * steps;
+ // Restzeit beibehalten, damit Timing gleichmäßig bleibt
+ this.lastSteerChange = currentTime - (elapsed % steeringInterval);
+ }
+ } else {
+ // Keine Lenkung gedrückt: Timer resetten, um Burst bei erstem Druck zu vermeiden
+ this.lastSteerChange = currentTime;
}
// Aktualisiere Position (1/4 der ursprünglichen Bewegung)
- this.taxi.x += Math.cos(this.taxi.angle) * this.taxi.speed * 0.25;
- this.taxi.y += Math.sin(this.taxi.angle) * this.taxi.speed * 0.25;
+ this.taxi.x += Math.cos(this.taxi.angle) * this.taxi.speed * 0.1;
+ this.taxi.y += Math.sin(this.taxi.angle) * this.taxi.speed * 0.1;
// Aktualisiere aktuelle Tile-Position
this.updateCurrentTile();
@@ -1162,25 +1164,6 @@ export default {
offsetY = (canvas.height - 8 * tileSize) / 2;
}
- // Passagiere (grün)
- ctx.fillStyle = '#4CAF50';
- this.passengers.forEach(passenger => {
- if (!passenger.pickedUp) {
- ctx.beginPath();
- ctx.arc(offsetX + passenger.x * scaleX, offsetY + passenger.y * scaleY, 2, 0, 2 * Math.PI);
- ctx.fill();
- }
- });
-
- // Ziele (rot)
- ctx.fillStyle = '#F44336';
- this.destinations.forEach(dest => {
- if (!dest.completed) {
- ctx.beginPath();
- ctx.arc(offsetX + dest.x * scaleX, offsetY + dest.y * scaleY, 2, 0, 2 * Math.PI);
- ctx.fill();
- }
- });
// Taxi (blau) - Position basierend auf aktueller Tile-Position
@@ -1606,20 +1589,6 @@ export default {
border: 1px solid #7E471B;
}
-.objective-green {
- color: #4CAF50;
- font-weight: bold;
-}
-
-.objective-red {
- color: #F44336;
- font-weight: bold;
-}
-
-.objective-yellow {
- color: #FF9800;
- font-weight: bold;
-}
/* Responsive Design */
@media (max-width: 1024px) {