129class Vehicle :
public VehicleBase
131 friend class VehicleSoundEntity;
132 friend class VehicleTurretGun;
146 int m_iLastTiresUpdate;
147 cVehicleSpline *m_pAlternatePath;
148 int m_iAlternateNode;
149 cVehicleSpline *m_pCurPath;
151 cVehicleSpline *m_pNextPath;
152 int m_iNextPathStartNode;
158 float prev_moveimpulse;
164 float m_fGearRatio[6];
169 float m_fWheelFrontLoad;
170 float m_fWheelFrontInnerLoad;
171 float m_fWheelFrontOutterLoad;
172 float m_fWheelFrontDist;
173 float m_fWheelFrontSuspension;
174 float m_fWheelBackLoad;
175 float m_fWheelBackInnerLoad;
176 float m_fWheelBackOutterLoad;
177 float m_fWheelBackDist;
178 float m_fWheelBackSuspension;
183 float m_fTireFriction;
186 float m_fFrontBrakes;
188 float m_fRollingResistance;
189 float m_fTireRotationalSpeed;
190 float m_fFrontBrakingForce;
191 float m_fBackBrakingForce;
192 float m_fBrakingPerformance;
196 float m_fDifferentialRatio;
197 float m_fGearEfficiency;
198 float m_fMaxTraction;
199 float m_fTractionForce;
200 float m_fAccelerator;
206 float m_fForwardForce;
209 float m_fSpringyCoef;
219 float m_fShaderOffset;
220 float m_fSoundMinSpeed;
221 float m_fSoundMinPitch;
222 float m_fSoundMaxSpeed;
223 float m_fSoundMaxPitch;
224 float m_fVolumeMinSpeed;
225 float m_fVolumeMinPitch;
226 float m_fVolumeMaxSpeed;
227 float m_fVolumeMaxPitch;
228 float m_fStopStartDistance;
229 float m_fStopStartSpeed;
230 float m_fStopEndDistance;
232 float m_fSkidLeftForce;
233 float m_fSkidRightForce;
238 str m_sExplosionModel;
243 Vector Corners[MAX_CORNERS];
257 Vector m_vAngularAcceleration;
258 Vector m_vAngularVelocity;
274 Vector m_vOriginCornerOffset;
279 qboolean pathDrivable;
283 qboolean steerinplace;
285 qboolean m_bWheelSpinning;
286 qboolean m_bIsSkidding;
287 qboolean m_bIsBraking;
288 qboolean m_bBackSlipping;
289 qboolean m_bFrontSlipping;
290 qboolean m_bAutomatic;
291 qboolean m_bThinkCalled;
292 qboolean m_bMovementLocked;
293 qboolean m_bRemoveOnDeath;
294 qboolean m_bStopEnabled;
295 qboolean m_bEnableSkidding;
296 qboolean m_bAnimMove;
297 qboolean m_bDamageSounds;
298 qboolean m_bRunSounds;
299 int m_iProjectileHitsRemaining;
304 bool m_bBounceBackwards;
308 float m_fIdealDistance;
312 SOUND_STATE m_eSoundState;
313 float m_fNextSoundState;
315 Vector m_vTireEnd[NUM_VEHICLE_TIRES];
316 bool m_bTireHit[NUM_VEHICLE_TIRES];
319 float m_fMaxUseAngle;
320 bool m_bBounceStayFullSpeed;
323 virtual void WorldEffects(
void);
324 virtual void CheckWater(
void);
325 virtual void DriverUse(
Event *ev);
326 virtual void VehicleStart(
Event *ev);
327 virtual void VehicleTouched(
Event *ev);
328 virtual void VehicleBlocked(
Event *ev);
329 void Think(
void)
override;
330 void Postthink(
void)
override;
331 virtual void Drivable(
Event *ev);
332 virtual void PathDrivable(
Event *ev);
333 virtual void UnDrivable(
Event *ev);
334 virtual void Jumpable(
Event *ev);
335 virtual void SeatAnglesOffset(
Event *ev);
336 virtual void SeatOffset(
Event *ev);
337 virtual void SetDriverAngles(
Vector angles);
338 virtual void Lock(
Event *ev);
339 virtual void UnLock(
Event *ev);
340 virtual void SetWeapon(
Event *ev);
341 virtual void SetName(
Event *ev);
342 virtual void ShowWeaponEvent(
Event *ev);
345 virtual void BounceForwardsVelocity(
Event *ev);
346 virtual void BounceBackwardsVelocity(
Event *ev);
347 virtual void StopForwardsVelocity(
Event *ev);
348 virtual void StopBackwardsVelocity(
Event *ev);
350 virtual void SetSpeed(
Event *ev);
351 virtual void SetTurnRate(
Event *ev);
352 virtual void SteerInPlace(
Event *ev);
353 virtual void VehicleDestroyed(
Event *ev);
354 virtual void SetMoveInfo(vmove_t *vm);
355 virtual void GetMoveInfo(vmove_t *vm);
356 virtual void SetCEMoveInfo(vmove_t *vm);
357 virtual void GetCEMoveInfo(vmove_t *vm);
358 virtual void SetViewAngles(
Vector newViewangles);
359 virtual void SetMass(
Event *ev);
360 virtual void SetFrontMass(
Event *ev);
361 virtual void SetBackMass(
Event *ev);
362 virtual void SetTread(
Event *ev);
363 virtual void SetTireRadius(
Event *ev);
364 virtual void SetRollingResistance(
Event *ev);
365 virtual void SetDrag(
Event *ev);
366 virtual float TorqueLookup(
int rpm);
367 virtual void UpdateVariables(
370 virtual void ModelInit(
Event *ev);
371 virtual void BouncyCoef(
Event *ev);
372 virtual void SpringyCoef(
Event *ev);
373 virtual void YawMinMax(
Event *ev);
374 virtual void RollMinMax(
Event *ev);
375 virtual void ZMinMax(
Event *ev);
376 virtual void SetAnimationSet(
Event *ev);
377 virtual void SetSoundSet(
Event *ev);
378 virtual void SpawnTurret(
Event *ev);
379 void EventLockMovement(
Event *ev);
380 void EventUnlockMovement(
Event *ev);
381 virtual void QuerySpeed(
Event *ev);
382 virtual void QueryFreePassengerSlot(
Event *ev);
383 virtual void QueryFreeDriverSlot(
Event *ev);
384 virtual void QueryFreeTurretSlot(
Event *ev);
385 virtual void QueryPassengerSlotPosition(
Event *ev);
386 virtual void QueryDriverSlotPosition(
Event *ev);
387 virtual void QueryTurretSlotPosition(
Event *ev);
388 virtual void QueryPassengerSlotAngles(
Event *ev);
389 virtual void QueryDriverSlotAngles(
Event *ev);
390 virtual void QueryTurretSlotAngles(
Event *ev);
391 virtual void QueryPassengerSlotStatus(
Event *ev);
392 virtual void QueryDriverSlotStatus(
Event *ev);
393 virtual void QueryTurretSlotStatus(
Event *ev);
394 virtual void QueryPassengerSlotEntity(
Event *ev);
395 virtual void QueryDriverSlotEntity(
Event *ev);
396 virtual void QueryTurretSlotEntity(
Event *ev);
397 virtual void AttachPassengerSlot(
Event *ev);
398 virtual void AttachDriverSlot(
Event *ev);
399 virtual void AttachTurretSlot(
Event *ev);
400 virtual void DetachPassengerSlot(
Event *ev);
401 virtual void DetachDriverSlot(
Event *ev);
402 virtual void DetachTurretSlot(
Event *ev);
403 virtual void DetachRemoteOwner();
404 virtual void SetWheelCorners(
Event *ev);
405 virtual void EventDriveInternal(
Event *ev,
bool wait);
406 virtual void EventDrive(
Event *ev);
407 virtual void EventDriveNoWait(
Event *ev);
408 virtual void EventStop(
Event *ev);
409 virtual void EventFullStop(
Event *ev);
410 virtual void EventModifyDrive(
Event *ev);
411 virtual void EventNextDrive(
Event *ev);
412 void EventModel(
Event *ev);
413 void EventRemoveOnDeath(
Event *ev);
414 void EventSetExplosionModel(
Event *ev);
415 void EventSetCollisionModel(
Event *ev);
416 void EventGetCollisionModel(
Event *ev);
417 void EventSetSoundParameters(
Event *ev);
418 void EventSetVolumeParameters(
Event *ev);
419 void EventDamage(
Event *ev);
420 void EventStopAtEnd(
Event *ev);
421 void EventSkidding(
Event *ev);
422 void EventContinueSkidding(
Event *ev);
423 void EventVehicleAnim(
Event *ev);
424 void EventVehicleAnimDone(
Event *ev);
427 void EventVehicleMoveAnim(
Event *ev);
428 void EventVehicleMoveAnimDone(
Event *ev);
429 void EventDamageSounds(
Event *ev);
430 void EventRunSounds(
Event *ev);
431 void Remove(
Event *ev);
433 void TouchStuff(vmove_t *vm);
434 virtual void ResetSlots(
void);
435 virtual void OpenSlotsByModel(
void);
436 virtual void MoveVehicle(
void);
437 virtual void AnimMoveVehicle(
void);
438 virtual bool AssertMove(
Vector vNewOrigin,
Vector vOldOrigin);
439 virtual bool AssertRotation(
Vector vNewAngles,
Vector vOldAngles);
440 virtual void NoMove(
void);
441 virtual void SlidePush(
Vector vPush);
442 void SetupPath(cVehicleSpline *pPath,
SimpleEntity *se);
443 virtual void UpdateSound(
void);
444 void SetupVehicleSoundEntities(
void);
445 void RemoveVehicleSoundEntities(
void);
446 void TurnOnVehicleSoundEntities(
void);
447 void TurnOffVehicleSoundEntities(
void);
448 void UpdateTires(
void);
449 void UpdateNormals(
void);
450 void UpdateBones(
void);
451 void UpdateShaderOffset(
void);
452 virtual void UpdateTurretSlot(
int iSlot);
453 void UpdatePassengerSlot(
int iSlot);
454 void UpdateDriverSlot(
int iSlot);
455 float GetPathPosition(cVehicleSpline *pPath,
int iNode);
456 void UpdateSkidAngle(
void);
457 void FactorInSkidOrigin(
void);
458 virtual void FactorInOriginOffset(
void);
459 virtual void CalculateOriginOffset(
void);
460 virtual void FactorOutOriginOffset(
void);
461 virtual void FactorInAnglesOffset(
Vector *vAddedAngles);
462 virtual void CalculateAnglesOffset(
Vector acceleration);
463 virtual void FactorOutAnglesOffset(
void);
465 qboolean GetTagPositionAndOrientation(
int tagnum,
orientation_t *new_or);
466 void CalculateAnimationData(
Vector vAngles,
Vector vOrigin);
467 bool IsDamagedBy(Entity *ent);
470 CLASS_PROTOTYPE(Vehicle);
475 virtual void DriverAdded();
476 virtual qboolean Drive(usercmd_t *ucmd);
477 virtual qboolean PathDrive(usercmd_t *ucmd);
478 void AutoPilot(
void);
479 virtual qboolean HasWeapon(
void);
480 virtual qboolean ShowWeapon(
void);
481 Entity *Driver(
void);
482 virtual qboolean IsDrivable(
void);
483 void Archive(
Archiver& arc)
override;
484 str GetSoundSet(
void);
485 virtual float QuerySpeed(
void);
486 virtual int QueryFreePassengerSlot(
void);
487 virtual int QueryFreeDriverSlot(
void);
488 virtual int QueryFreeTurretSlot(
void);
489 virtual void QueryPassengerSlotPosition(
int slot,
float *pos);
490 virtual void QueryDriverSlotPosition(
int slot,
float *pos);
491 virtual void QueryTurretSlotPosition(
int slot,
float *pos);
492 virtual void QueryPassengerSlotAngles(
int slot,
float *ang);
493 virtual void QueryDriverSlotAngles(
int slot,
float *ang);
494 virtual void QueryTurretSlotAngles(
int slot,
float *ang);
495 virtual int QueryPassengerSlotStatus(
int slot);
496 virtual int QueryDriverSlotStatus(
int slot);
497 virtual int QueryTurretSlotStatus(
int slot);
498 virtual Entity *QueryPassengerSlotEntity(
int slot);
499 virtual Entity *QueryDriverSlotEntity(
int slot);
500 virtual Entity *QueryTurretSlotEntity(
int slot);
501 bool FindExitPosition(Entity *pEnt,
const Vector& vOrigin,
const Vector *vAngles);
502 virtual void AttachPassengerSlot(
int slot, Entity *ent,
Vector vExitPosition);
503 virtual void AttachDriverSlot(
int slot, Entity *ent,
Vector vExitPosition);
504 virtual void AttachTurretSlot(
int slot, Entity *ent,
Vector vExitPosition,
Vector *vExitAngles);
505 virtual void DetachPassengerSlot(
int slot,
Vector vExitPosition,
Vector *vExitAngles);
506 virtual void DetachDriverSlot(
int slot,
Vector vExitPosition,
Vector *vExitAngles);
507 virtual void DetachTurretSlot(
int slot,
Vector vExitPosition,
Vector *vExitAngles);
508 virtual int FindPassengerSlotByEntity(Entity *ent);
509 virtual int FindDriverSlotByEntity(Entity *ent);
510 virtual int FindTurretSlotByEntity(Entity *ent);
511 virtual void SetSlotsNonSolid(
void);
512 virtual void SetSlotsSolid(
void);
513 void KickSuspension(
Vector vDirection,
float fForce);
514 qboolean isLocked(
void);
517 const str& getName()
const;
521 void EventSetMaxUseAngle(
Event *ev);
522 void EventCanUse(
Event *ev);
523 int GetProjectileHitsRemaining()
const;
524 void SetProjectileVulnerable(
Event* ev);
525 void DoProjectileVulnerability(Entity* pProjectile, Entity* pOwner, meansOfDeath_t meansOfDeath);