This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/wwphys/wheelvehicle.h

160 lines
5.5 KiB
C
Raw Permalink Normal View History

/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/***********************************************************************************************
*** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
***********************************************************************************************
* *
* Project Name : WWPhys *
* *
* $Archive:: /Commando/Code/wwphys/wheelvehicle.h $*
* *
* Author:: Greg Hjelstrom *
* *
* $Modtime:: 9/20/01 1:57p $*
* *
* $Revision:: 22 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#if defined(_MSC_VER)
#pragma once
#endif
#ifndef WHEELVEHICLE_H
#define WHEELVEHICLE_H
#ifndef ALWAYS_H
#include "always.h"
#endif
#ifndef MOTORVEHICLE_H
#include "motorvehicle.h"
#endif
#ifndef LOOKUPTABLE_H
#include "lookuptable.h"
#endif
#include "wheel.h"
class WheelClass;
class NormalWheelClass;
class WheeledVehicleDefClass;
/**
** WheeledVehicleClass
** This is a derivation of RigidBodyClass which basically adds wheels to
** a rigid body object. Each wheel detected in the model will have a friction
** model and a spring-damper force. Each one will "roll" an amount derived
** from the motion of the contact point for the wheel. Special engine wheels
** drive the model and steering wheels can be turned. The goal here is for
** this class to handle all wheeled vehicles in the game. 3, 4, and 6 wheeled
** vehicles will hopefully be possible...
**
** Wheeled Vehicle Physics Update Feb 29,2000
** - The two most important things to simulate are the forces at the contact
** patches of the tires and the behavior of the engine.
*/
class WheeledVehicleClass : public MotorVehicleClass
{
public:
WheeledVehicleClass(void);
virtual ~WheeledVehicleClass(void);
virtual WheeledVehicleClass * As_WheeledVehicleClass(void) { return this; }
const WheeledVehicleDefClass * Get_WheeledVehicleDef(void);
void Init(const WheeledVehicleDefClass & def);
/*
** Save-Load System
*/
virtual const PersistFactoryClass & Get_Factory (void) const;
virtual bool Save (ChunkSaveClass &csave);
virtual bool Load (ChunkLoadClass &cload);
protected:
virtual SuspensionElementClass * Alloc_Suspension_Element(void);
virtual void Compute_Force_And_Torque(Vector3 * force,Vector3 * torque);
virtual float Get_Ideal_Drive_Axle_Angular_Velocity(void);
virtual bool Drive_Wheels_In_Contact(void);
float SteeringAngle;
private:
WheeledVehicleClass(const WheeledVehicleClass &);
WheeledVehicleClass & operator = (const WheeledVehicleClass &);
};
/**
** WheeledVehicleDefClass
** Initialization/Editor Integration for WheeledVehicleClass
*/
class WheeledVehicleDefClass : public MotorVehicleDefClass
{
public:
WheeledVehicleDefClass(void);
// From DefinitionClass
virtual uint32 Get_Class_ID (void) const;
virtual PersistClass * Create(void) const;
// From PhysDefClass
virtual const char * Get_Type_Name(void) { return "WheeledVehicleDef"; }
virtual bool Is_Type(const char *);
// From PersistClass
virtual const PersistFactoryClass & Get_Factory (void) const;
virtual bool Save(ChunkSaveClass &csave);
virtual bool Load(ChunkLoadClass &cload);
// Read/Write access to our variables
float Get_Max_Steering_Angle(void) const { return MaxSteeringAngle; }
void Set_Max_Steering_Angle(float a) { MaxSteeringAngle = a; }
// Editable interface requirements
DECLARE_EDITABLE(WheeledVehicleDefClass,MotorVehicleDefClass);
protected:
float MaxSteeringAngle; // maximum angle for the steering wheels
friend class WheeledVehicleClass;
};
/*
** Inline functions
*/
inline const WheeledVehicleDefClass * WheeledVehicleClass::Get_WheeledVehicleDef(void)
{
return (WheeledVehicleDefClass *)Definition;
}
#endif