Files
gridpilot.gg/adapters/bootstrap/racing/RacingTrackFactory.ts
2025-12-27 10:43:55 +01:00

208 lines
5.6 KiB
TypeScript

import { Track } from '@core/racing/domain/entities/Track';
export class RacingTrackFactory {
create(): Track[] {
// Only a subset of track images exist locally in `apps/website/public/images/tracks`.
// Use a real local image for a few, and a stable local placeholder for the rest.
const placeholderImageUrl = '/images/leagues/placeholder-cover.svg';
return [
// Road tracks - various difficulties
Track.create({
id: 'track-spa',
name: 'Spa-Francorchamps',
shortName: 'SPA',
country: 'Belgium',
category: 'road',
difficulty: 'advanced',
lengthKm: 7.004,
turns: 19,
imageUrl: '/images/tracks/spa.jpg',
gameId: 'iracing',
}),
Track.create({
id: 'track-monza',
name: 'Autodromo Nazionale Monza',
shortName: 'MON',
country: 'Italy',
category: 'road',
difficulty: 'intermediate',
lengthKm: 5.793,
turns: 11,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-nurburgring',
name: 'Nürburgring Grand Prix',
shortName: 'NUR',
country: 'Germany',
category: 'road',
difficulty: 'advanced',
lengthKm: 5.148,
turns: 15,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-silverstone',
name: 'Silverstone Circuit',
shortName: 'SIL',
country: 'United Kingdom',
category: 'road',
difficulty: 'intermediate',
lengthKm: 5.891,
turns: 18,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-suzuka',
name: 'Suzuka International Racing Course',
shortName: 'SUZ',
country: 'Japan',
category: 'road',
difficulty: 'expert',
lengthKm: 5.807,
turns: 18,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-laguna',
name: 'WeatherTech Raceway Laguna Seca',
shortName: 'LAG',
country: 'United States',
category: 'road',
difficulty: 'advanced',
lengthKm: 3.602,
turns: 11,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-zandvoort',
name: 'Circuit Zandvoort',
shortName: 'ZAN',
country: 'Netherlands',
category: 'road',
difficulty: 'intermediate',
lengthKm: 4.259,
turns: 14,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-imola',
name: 'Autodromo Enzo e Dino Ferrari',
shortName: 'IMO',
country: 'Italy',
category: 'road',
difficulty: 'advanced',
lengthKm: 4.909,
turns: 19,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-le-mans',
name: 'Circuit de la Sarthe',
shortName: 'LEM',
country: 'France',
category: 'road',
difficulty: 'expert',
lengthKm: 13.626,
turns: 38,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-hockenheim',
name: 'Hockenheimring',
shortName: 'HOC',
country: 'Germany',
category: 'road',
difficulty: 'intermediate',
lengthKm: 4.574,
turns: 17,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
// Oval tracks
Track.create({
id: 'track-daytona',
name: 'Daytona International Speedway',
shortName: 'DAY',
country: 'United States',
category: 'oval',
difficulty: 'intermediate',
lengthKm: 4.023,
turns: 4,
imageUrl: '/images/tracks/daytona.jpg',
gameId: 'iracing',
}),
Track.create({
id: 'track-indianapolis',
name: 'Indianapolis Motor Speedway',
shortName: 'IMS',
country: 'United States',
category: 'oval',
difficulty: 'advanced',
lengthKm: 4.192,
turns: 4,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-talladega',
name: 'Talladega Superspeedway',
shortName: 'TAL',
country: 'United States',
category: 'oval',
difficulty: 'beginner',
lengthKm: 4.280,
turns: 4,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
// Street tracks
Track.create({
id: 'track-miami',
name: 'Miami Street Circuit',
shortName: 'MIA',
country: 'United States',
category: 'street',
difficulty: 'intermediate',
lengthKm: 5.410,
turns: 19,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
Track.create({
id: 'track-las-vegas',
name: 'Las Vegas Street Circuit',
shortName: 'VEG',
country: 'United States',
category: 'street',
difficulty: 'advanced',
lengthKm: 6.201,
turns: 17,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
// Dirt tracks
Track.create({
id: 'track-eldo',
name: 'Eldora Speedway',
shortName: 'ELD',
country: 'United States',
category: 'dirt',
difficulty: 'beginner',
lengthKm: 0.805,
turns: 4,
imageUrl: placeholderImageUrl,
gameId: 'iracing',
}),
];
}
}