class SCar extends SVehicle abstract native; cpptext { #ifdef WITH_KARMA // Actor interface. virtual UBOOL Tick(FLOAT DeltaTime, enum ELevelTick TickType); virtual void PostNetReceive(); // SVehicle interface. virtual void UpdateVehicle(FLOAT DeltaTime); // SCar interface. virtual void ProcessCarInput(); virtual void ChangeGear(UBOOL bReverse); virtual void PackState(); #endif } // wheel params var() float WheelSoftness; var() float WheelPenScale; var() float WheelRestitution; var() float WheelAdhesion; var() float WheelInertia; var() InterpCurve WheelLongFrictionFunc; var() float WheelLongSlip; var() InterpCurve WheelLatSlipFunc; var() float WheelLongFrictionScale; var() float WheelLatFrictionScale; var() float WheelHandbrakeSlip; var() float WheelHandbrakeFriction; var() float WheelSuspensionTravel; var() float WheelSuspensionOffset; var() float FTScale; var() float ChassisTorqueScale; var() float MinBrakeFriction; var() float MaxSteerAngle; // degrees var() InterpCurve TorqueCurve; // Engine output torque var() float GearRatios[5]; // 0 is reverse, 1-4 are forward var() float TransRatio; // Other (constant) gearing var() float ChangeUpPoint; var() float ChangeDownPoint; var() float LSDFactor; var() float EngineBrakeFactor; var() float EngineBrakeRPMScale; var() float MaxBrakeTorque; var() float SteerSpeed; // degrees per second var() float StopThreshold; var() float HandbrakeThresh; var() float EngineInertia; // Pre-gear box engine inertia (racing flywheel etc.) var() float IdleRPM; var() sound IdleSound; var() float EngineRPMSoundRange; var() name SteerBoneName; var() EAxis SteerBoneAxis; var() float SteerBoneMaxAngle; // degrees // Internal var float OutputBrake; var float OutputGas; var bool OutputHandbrake; var int Gear; var float ForwardVel; var bool bIsInverted; var bool bIsDriving; var float NumPoweredWheels; var float TotalSpinVel; var float EngineRPM; var float CarMPH; var float ActualSteering; // Rev meter var material RevMeterMaterial; var() float RevMeterPosX; var() float RevMeterPosY; var() float RevMeterScale; var() float RevMeterSizeY; struct native SCarState { var KRBVec ChassisPosition; var Quat ChassisQuaternion; var KRBVec ChassisLinVel; var KRBVec ChassisAngVel; var float ServerHandbrake; var float ServerBrake; var float ServerGas; var int ServerGear; var float ServerSteering; var int bNewState; // bools inside structs == scary! }; var SCarState CarState; var KRigidBodyState ChassisState; var bool bNewCarState; replication { unreliable if(Role == ROLE_Authority) CarState; } /////////////////////////////////////////// /////////////// CREATION ////////////////// /////////////////////////////////////////// simulated function PostNetBeginPlay() { local int i; // Count the number of powered wheels on the car NumPoweredWheels = 0.0; for(i=0; i