from __future__ import annotations import os from constants import DLC_NAMES from loader import ( InitialPakLoader, LanguageLoader, SnowrunnerGameObjectType, TruckAddonCategory, ) from logging import getLogger logger = getLogger(__name__) def get_head(language: LanguageLoader, category: str, name: str | None = None) -> str: return f"""\n\n""" + ( f"""
| Name | \n" f"Class | \n" f"DLC | \n" f"Unlock by | \n" f"Region | \n" f"Price | \n" f"Weight | \n" f"Drivetrain | \n" f"AWD | \n" f"DiffLock | \n" f"
|---|---|---|---|---|---|---|---|---|---|
| DLC | {DLC_NAMES[truck.DLC]} |
| Weight | {truck.Weight}kg |
| AWD | {language[truck.AWDInfo.value]} |
| DiffLock | {language[truck.DiffLockInfo.value]} |
| Def Engine | {truck.TruckData.DefaultEngine.get_translated_ui_name(language)} |
| Def Gearbox | {truck.TruckData.DefaultGearbox.get_translated_ui_name(language)} |
| Def Suspension | {truck.TruckData.DefaultSuspension.get_translated_ui_name(language)} |
| Def Winch | {truck.TruckData.DefaultWinch.get_translated_ui_name(language)} |
| Def Tire | {truck.TruckData.Wheels.DefaultTire.get_translated_ui_name(language)} |
| Name | \n" f"Price | \n" f"Unlock By | \n" f"Base Fuel Consumption | \n" f"Torque | \n" f"Power-to-Weight | \n" f"
|---|---|---|---|---|---|
| {engine.get_translated_ui_name(language)} | " f"{engine.GameData.Price}" f" | {engine.GameData.get_unlock_str()} | " f"{engine.FuelConsumption} | " f"{engine.Torque} | " f"{engine.Torque / truck.Weight:.2f} | " f"
| Name | \n" f"Price | \n" f"Unlock By | \n" f"Fine-Tunable | \n" f"L- | \n" f"L | \n" f"L+ | \n" f"H | \n" f"Gears | \n" f"
|---|---|---|---|---|---|---|---|---|
| {gearbox.get_translated_ui_name(language)} | \n" truck_content += f"{gearbox.Price} | \n" truck_content += f"{gearbox.GameData.get_unlock_str()} | \n" truck_content += ( f"{'✓' if gearbox.GearboxParams.IsManualLowGear else '˙'} | \n" ) truck_content += ( f"{'✓' if gearbox.GearboxParams.IsLowerMinusGearExists else '˙'} | \n" ) truck_content += ( f"{'✓' if gearbox.GearboxParams.IsLowerGearExists else '˙'} | \n" ) truck_content += ( f"{'✓' if gearbox.GearboxParams.IsLowerPlusGearExists else '˙'} | \n" ) truck_content += ( f"{'✓' if gearbox.GearboxParams.IsHighGearExists else '˙'} | \n" ) truck_content += f"{len(gearbox.Gear)} | \n" truck_content += f"
| Name | \n" f"Fuel Consumption | \n" f"AWD Fuel Modifier | \n" ) for i in range(max_gear_count): gear_num = str(i + 1) if i > 0 else "L+/1" truck_content += f"{gear_num} | \n" truck_content += f"|
|---|---|---|---|---|
| {gearbox.get_translated_ui_name(language)} | \n" truck_content += f"{gearbox.FuelConsumption} | \n" truck_content += f"{gearbox.AWDConsumptionModifier} | \n" for i in range(max_gear_count): if i >= len(gearbox.Gear): truck_content += f"- | \n" else: truck_content += f"{gearbox.Gear[i].FuelModifier} | \n" truck_content += f"
| Friction | ||||||
|---|---|---|---|---|---|---|
| Name | Price | Mass | Width | Asphalt | Off-Road | Mud |
| {tt.get_translated_ui_name(language)} | {tt.GameData.Price} | {mass}kg | {width}cm | {tt.WheelFriction.BodyFrictionAsphalt} | {tt.WheelFriction.BodyFriction} | {tt.WheelFriction.SubstanceFriction} |
| Name | \n" f"Price | \n" f"Unlock By | \n" f"
|---|---|---|
| {addon.get_translated_ui_name(language)} | \n" f"{addon.Price} | \n" f"{addon.GameData.get_unlock_str()} | \n" f"
| Name | \n" f"Price | \n" f"Unlock By | \n" f"Mass | \n" f"
|---|---|---|---|
| {addon.get_translated_ui_name(language)} | \n" f"{addon.Price} | \n" f"{addon.GameData.get_unlock_str()} | \n" f"{addon.PhysicsModel.Weight}kg | \n" f"
| Name | \n" f"Price | \n" f"Unlock By | \n" f"Mass | \n" f"
|---|---|---|---|
| {addon.get_translated_ui_name(language)} | \n" f"{addon.Price} | \n" f"{addon.GameData.get_unlock_str()} | \n" f"{addon.PhysicsModel.Weight}kg | \n" f"
| Name | \n" f"Price | \n" f"Unlock By | \n" f"Mass | \n" f"Cargo Slots | \n" f"Repair Points | \n" f"Spare Wheels | \n" f"Fuel Capacity | \n" f"Water Capacity | \n" f"
|---|---|---|---|---|---|---|---|---|
| {truck_addon.get_translated_ui_name(language)} | \n" truck_content += f"{truck_addon.Price} | \n" truck_content += f"{truck_addon.GameData.get_unlock_str()} | \n" truck_content += f"{truck_addon.PhysicsModel.Weight}kg | \n" truck_content += f"{truck_addon.AddonSlots.Quantity if truck_addon.AddonSlots is not None else ' '} | \n" truck_content += f"{truck_addon.TruckData.RepairsCapacity if truck_addon.TruckData is not None and truck_addon.TruckData.RepairsCapacity > 0 else ' '} | \n" truck_content += f"{truck_addon.TruckData.WheelRepairsCapacity if truck_addon.TruckData is not None and truck_addon.TruckData.WheelRepairsCapacity > 0 else ' '} | \n" truck_content += f"{truck_addon.TruckData.FuelCapacity if truck_addon.TruckData is not None and truck_addon.TruckData.FuelCapacity > 0 else ' '} | \n" truck_content += f"{truck_addon.TruckData.WaterCapacity if truck_addon.TruckData is not None and truck_addon.TruckData.WaterCapacity > 0 else ' '} | \n" truck_content += f"
| Name | \n" f"Price | \n" f"Unlock By | \n" f"Mass | \n" f"Cargo Slots | \n" f"Repair Points | \n" f"Spare Wheels | \n" f"Fuel Capacity | \n" f"Water Capacity | \n" f"Available for | \n" f"
|---|---|---|---|---|---|---|---|---|---|
| {frame_addon.get_translated_ui_name(language)} | \n" index_content += f"{frame_addon.Price} | \n" index_content += f"{frame_addon.GameData.get_unlock_str()} | \n" index_content += f"{frame_addon.PhysicsModel.Weight}kg | \n" index_content += f"{frame_addon.AddonSlots.Quantity if frame_addon.AddonSlots is not None else ' '} | \n" index_content += f"{frame_addon.TruckData.RepairsCapacity if frame_addon.TruckData is not None and frame_addon.TruckData.RepairsCapacity > 0 else ' '} | \n" index_content += f"{frame_addon.TruckData.WheelRepairsCapacity if frame_addon.TruckData is not None and frame_addon.TruckData.WheelRepairsCapacity > 0 else ' '} | \n" index_content += f"{frame_addon.TruckData.FuelCapacity if frame_addon.TruckData is not None and frame_addon.TruckData.FuelCapacity > 0 else ' '} | \n" index_content += f"{frame_addon.TruckData.WaterCapacity if frame_addon.TruckData is not None and frame_addon.TruckData.WaterCapacity > 0 else ' '} | \n" truck_links = ", ".join( f'{truck.get_translated_ui_name(language)}' for ref, truck in available_trucks ) index_content += f"{truck_links} | \n" index_content += f"
| Name | \n" f"Price | \n" f"Unlock By | \n" f"Quest | \n" f"Mass | \n" f"Hitch | \n" f"Cargo Slots | \n" f"Repair Points | \n" f"Spare Wheels | \n" f"Fuel Capacity | \n" f"Water Capacity | \n" f"||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {trailer.get_translated_ui_name(language)} | \n" index_content += f"{trailer.Price} | \n" index_content += f"{trailer.GameData.get_unlock_str()} | \n" index_content += f"{trailer.GameData.IsQuest} | \n" index_content += f"{trailer.PhysicsModel.Weight}kg | \n" index_content += f"{trailer.GameData.InstallSocket.Type} | \n" if trailer.GameData.AddonSlots is None: index_content += f"\n" else: if isinstance(trailer.GameData.AddonSlots, list): index_content += f" | {sum(x.Quantity for x in trailer.GameData.AddonSlots)} | \n" else: index_content += f"{trailer.GameData.AddonSlots.Quantity} | \n" index_content += f"{trailer.TruckData.RepairsCapacity if trailer.TruckData is not None and trailer.TruckData.RepairsCapacity > 0 else ' '} | \n" index_content += f"{trailer.TruckData.WheelRepairsCapacity if trailer.TruckData is not None and trailer.TruckData.WheelRepairsCapacity > 0 else ' '} | \n" index_content += f"{trailer.TruckData.FuelCapacity if trailer.TruckData is not None and trailer.TruckData.FuelCapacity > 0 else ' '} | \n" index_content += f"{trailer.TruckData.WaterCapacity if trailer.TruckData is not None and trailer.TruckData.WaterCapacity > 0 else ' '} | \n" index_content += f"
| Name | \n" f"Mass (unpacked) | \n" f"Mass (packed) | \n" f"Cargo Slots | \n" f"
|---|---|---|---|
| {cargo_type.get_translated_ui_name(language)} | \n" index_content += f"{model_brand.PhysicsModel.Weight} | \n" index_content += f"{install_addon.PhysicsModel.Weight} | \n" index_content += f"{install_addon.GameData.InstallSlot.CargoLength} | \n" index_content += f"