Files
train-game/scripts/car_defs.gd
2026-08-29 11:44:31 +02:00

103 lines
3.1 KiB
GDScript

extends RefCounted
## Stammdaten für Loks, Waggons und Ausbauten.
enum Kind { LOCO, PASSENGER, FREIGHT, DINING }
## Loks. "rep" = benoetigtes Ansehen zum Freischalten.
const LOCOS := {
"steam": {
"name": "Dampf-Veteran", "price": 0, "sell": 0, "rep": 0,
"length": 11.0, "max_speed": 15.0, "accel": 3.0, "brake": 8.0,
"color": "a83b30", "trim": "7d2a22",
"desc": "Gemütlich, laut, zuverlässig.",
},
"diesel": {
"name": "Diesel-Kurier", "price": 3200, "sell": 1900, "rep": 12,
"length": 12.0, "max_speed": 24.0, "accel": 4.6, "brake": 10.0,
"color": "2f6f4e", "trim": "24523b",
"desc": "Schneller anfahren, höhere Endgeschwindigkeit.",
},
"express": {
"name": "Elektro-Express", "price": 11000, "sell": 6600, "rep": 40,
"length": 13.0, "max_speed": 34.0, "accel": 6.8, "brake": 13.5,
"color": "2c4f8a", "trim": "1e3a68",
"desc": "Der Fernverkehr lässt grüßen.",
},
}
## Waggons.
const CARS := {
"coach": {
"name": "Personenwagen", "kind": Kind.PASSENGER, "price": 900, "sell": 540, "rep": 0,
"length": 12.0, "seats": 8, "capacity": 0,
"color": "c8ccd2", "trim": "8f959c",
"desc": "Acht Sitzplätze, schlichte Ausstattung.",
},
"saloon": {
"name": "Salonwagen", "kind": Kind.PASSENGER, "price": 2600, "sell": 1560, "rep": 18,
"length": 13.0, "seats": 10, "capacity": 0,
"color": "e8dcc0", "trim": "b09a6d",
"desc": "Zehn Plätze. Gäste zahlen 50 % mehr.",
"fare_bonus": 0.5,
},
"freight": {
"name": "Güterwagen", "kind": Kind.FREIGHT, "price": 700, "sell": 420, "rep": 0,
"length": 11.0, "seats": 0, "capacity": 10,
"color": "8a5c3c", "trim": "6b4630",
"desc": "Zehn Einheiten Ladung.",
},
"hopper": {
"name": "Großgüterwagen", "kind": Kind.FREIGHT, "price": 2100, "sell": 1260, "rep": 14,
"length": 13.0, "seats": 0, "capacity": 22,
"color": "6b7a52", "trim": "4f5c3c",
"desc": "22 Einheiten Ladung.",
},
"dining": {
"name": "Speisewagen", "kind": Kind.DINING, "price": 1900, "sell": 1140, "rep": 8,
"length": 12.0, "seats": 4, "capacity": 0,
"color": "b8874a", "trim": "8d6435",
"desc": "Hier gibt es Getränke für die Gäste.",
},
}
## Dauerhafte Ausbauten, einmal kaufbar.
const UPGRADES := {
"loader": {
"name": "Schnelllader", "price": 1400, "rep": 6,
"desc": "Be- und Entladen läuft doppelt so schnell.",
},
"scanner": {
"name": "Ticket-Scanner", "price": 1100, "rep": 10,
"desc": "Ticketkontrolle in einem Rutsch statt Gast für Gast.",
},
"trolley": {
"name": "Servierwagen", "price": 1800, "rep": 20,
"desc": "Trägt drei Getränke statt einem.",
},
"schedule": {
"name": "Fahrplan-Tafel", "price": 900, "rep": 4,
"desc": "Zeigt Ziel und Wunsch jedes Gastes im HUD.",
},
}
static func loco(id: String) -> Dictionary:
return LOCOS[id]
static func car(id: String) -> Dictionary:
return CARS[id]
static func car_length(id: String) -> float:
if LOCOS.has(id):
return float(LOCOS[id]["length"])
return float(CARS[id]["length"])
static func kind_of(id: String) -> int:
if LOCOS.has(id):
return Kind.LOCO
return int(CARS[id]["kind"])
static func display_name(id: String) -> String:
if LOCOS.has(id):
return String(LOCOS[id]["name"])
return String(CARS[id]["name"])