User:Psycommando/wip About Source Vehicles

From Valve Developer Community
Jump to: navigation, search
Article I'm currently writing about the vehicles in the source engine

About

This article will explain how the vehicles in source work, and what's the idea behind their current internal structure.

In General

All vehicles, including the airboat inherits from the same base classes:

Note:Note that abstract interfaces aren't properly represented here as separate nodes. However classes that inherit from an interface will have it listed under its name along with every other parent classes.

2011April25 Source Vehicles Class Diagram ServerSide.png


At the end of the day, the typical source vehicle is made up of 3 parts:

Prop Driveable entity

This is the main part of the vehicle, it's the entity that has the actual name of the vehicle and inherits from CPropVehicleDriveable. Like CPropAirboat.

This entity doesn't handle passengers or passengers entry, since the code the player used to ride vehicles needs a IServerVehicle. That's why there is a member pointer on a CFourWheelsServerVehicle stored in the instance.

Server Vehicle

This class's primary purpose is to handle passenger entry, and sound state, along with acting as a proxy between the Driveable Vehicle, and the physic vehicle. It uses data structures named operating, control, and vehicle params, to share informations between the driveable and physics classes. Its other purpose is to trigger the loading of the vehicle script data on its creation, along with the creation of the physics vehicle object.

Vehicle Physics

This class isn't an entity, it's mostly a wrapper between the driveable and server vehicle entities and the vehicle physics controller(IPhysicsVehicleController). It transmit data from the IPhysicsVehicleController object (that's in the physics dll) through the GetVehicleOperatingParams() method. It also transmit to the IPhysicsVehicleController the data in the control params(m_controls) structure. This object is responsible for loading and parsing the physics vehicle data, through the bool ParseVehicleScript( const char *pScriptName, solid_t &solid, vehicleparams_t &vehicle ) method.

The Buggy and Jalopy

Buggy.jpg

The buggy

To do: buggy and jalopy specifics.

The Airboat

Prop vehicle airboat.jpg

The airboat uses the same physical entity as the buggy CFourWheelVehiclePhysics. But it change the vehicle type value to ,

To do: airboat specifics.

Player Interaction

To do: describe what goes on when the player uses a vehicle.