Änderung: Hinzufügung des Taxi-Minispiels und zugehöriger Funktionen

Änderungen:
- Integration des Taxi-Minispiels mit neuen Routen und Komponenten im Backend und Frontend.
- Erstellung von Modellen und Datenbank-Schemas für das Taxi-Spiel, einschließlich TaxiGameState, TaxiLevelStats und TaxiMap.
- Erweiterung der Navigationsstruktur und der Benutzeroberfläche, um das Taxi-Spiel und die zugehörigen Tools zu unterstützen.
- Aktualisierung der Übersetzungen für das Taxi-Minispiel in Deutsch und Englisch.

Diese Anpassungen erweitern die Funktionalität der Anwendung um ein neues Minispiel und verbessern die Benutzererfahrung durch neue Features und Inhalte.
This commit is contained in:
Torsten Schulz (local)
2025-09-15 17:59:42 +02:00
parent 4699488ce1
commit f230849a5c
72 changed files with 7698 additions and 133 deletions

View File

@@ -0,0 +1,144 @@
import TaxiService from '../services/taxiService.js';
function extractHashedUserId(req) {
return req.headers?.userid;
}
class TaxiController {
constructor() {
this.taxiService = new TaxiService();
}
// Spielstand laden
async getGameState(req, res) {
try {
const hashedUserId = extractHashedUserId(req);
const gameState = await this.taxiService.getGameState(hashedUserId);
res.json({ success: true, data: gameState });
} catch (error) {
console.error('Error getting taxi game state:', error);
res.status(500).json({ success: false, message: 'Fehler beim Laden des Spielstands' });
}
}
// Spielstand speichern
async saveGameState(req, res) {
try {
const userId = extractHashedUserId(req);
const { level, score, money, passengersDelivered, fuel } = req.body;
const gameState = await this.taxiService.saveGameState(userId, {
level,
score,
money,
passengersDelivered,
fuel
});
res.json({ success: true, data: gameState });
} catch (error) {
console.error('Error saving taxi game state:', error);
res.status(500).json({ success: false, message: 'Fehler beim Speichern des Spielstands' });
}
}
// Level-Statistiken abrufen
async getLevelStats(req, res) {
try {
const userId = extractHashedUserId(req);
const { level } = req.params;
const stats = await this.taxiService.getLevelStats(userId, parseInt(level));
res.json({ success: true, data: stats });
} catch (error) {
console.error('Error getting level stats:', error);
res.status(500).json({ success: false, message: 'Fehler beim Laden der Level-Statistiken' });
}
}
// Bestenliste abrufen
async getLeaderboard(req, res) {
try {
const { type = 'score', limit = 10 } = req.query;
const leaderboard = await this.taxiService.getLeaderboard(type, parseInt(limit));
res.json({ success: true, data: leaderboard });
} catch (error) {
console.error('Error getting leaderboard:', error);
res.status(500).json({ success: false, message: 'Fehler beim Laden der Bestenliste' });
}
}
// Spiel beenden und Punkte verarbeiten
async finishGame(req, res) {
try {
const userId = extractHashedUserId(req);
const { finalScore, finalMoney, passengersDelivered, level } = req.body;
const result = await this.taxiService.finishGame(userId, {
finalScore,
finalMoney,
passengersDelivered,
level
});
res.json({ success: true, data: result });
} catch (error) {
console.error('Error finishing game:', error);
res.status(500).json({ success: false, message: 'Fehler beim Beenden des Spiels' });
}
}
// Level freischalten
async unlockLevel(req, res) {
try {
const userId = extractHashedUserId(req);
const { level } = req.body;
const result = await this.taxiService.unlockLevel(userId, level);
res.json({ success: true, data: result });
} catch (error) {
console.error('Error unlocking level:', error);
res.status(500).json({ success: false, message: 'Fehler beim Freischalten des Levels' });
}
}
// Spieler-Statistiken abrufen
async getPlayerStats(req, res) {
try {
const userId = extractHashedUserId(req);
const stats = await this.taxiService.getPlayerStats(userId);
res.json({ success: true, data: stats });
} catch (error) {
console.error('Error getting player stats:', error);
res.status(500).json({ success: false, message: 'Fehler beim Laden der Spieler-Statistiken' });
}
}
// Level zurücksetzen
async resetLevel(req, res) {
try {
const userId = extractHashedUserId(req);
const { level } = req.body;
const result = await this.taxiService.resetLevel(userId, level);
res.json({ success: true, data: result });
} catch (error) {
console.error('Error resetting level:', error);
res.status(500).json({ success: false, message: 'Fehler beim Zurücksetzen des Levels' });
}
}
// Alle Spielstände zurücksetzen
async resetAllProgress(req, res) {
try {
const userId = extractHashedUserId(req);
const result = await this.taxiService.resetAllProgress(userId);
res.json({ success: true, data: result });
} catch (error) {
console.error('Error resetting all progress:', error);
res.status(500).json({ success: false, message: 'Fehler beim Zurücksetzen aller Fortschritte' });
}
}
}
export default TaxiController;