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];
247 Vector ground_normal;
249 Vector prev_velocity;
250 Vector real_velocity;
252 Vector real_acceleration;
253 Vector prev_acceleration;
257 Vector m_vAngularAcceleration;
258 Vector m_vAngularVelocity;
260 Vector m_vFrontNormal;
261 Vector m_vBackNormal;
262 Vector m_vFrontAngles;
263 Vector m_vBackAngles;
264 Vector m_vBaseNormal;
265 Vector m_vBaseAngles;
266 Vector m_vPrevNormal;
267 Vector m_vResistance;
268 Vector m_vWheelForce;
271 Vector m_vAcceleration;
272 Vector m_vOriginOffset;
273 Vector m_vOriginOffset2;
274 Vector m_vOriginCornerOffset;
275 Vector m_vAnglesOffset;
276 Vector m_vSaveAngles;
277 Vector m_vSkidOrigin;
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;
305 Vector m_vIdealPosition;
308 float m_fIdealDistance;
311 SafePtr<VehicleCollisionEntity> m_pCollisionEntity;
312 SOUND_STATE m_eSoundState;
313 float m_fNextSoundState;
314 SafePtr<VehicleSoundEntity> m_pVehicleSoundEntities[MAX_CORNERS];
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(
368 Vector *acceleration, Vector *vpn, Vector *vup, Vector *vright, Vector *t_vpn, Vector *t_vup, Vector *t_vright
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);
464 qboolean GetTagPositionAndOrientation(str tagname,
orientation_t *new_or);
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);