diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /PhysX_3.4/Include/vehicle/PxVehicleDrive.h | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'PhysX_3.4/Include/vehicle/PxVehicleDrive.h')
| -rw-r--r-- | PhysX_3.4/Include/vehicle/PxVehicleDrive.h | 566 |
1 files changed, 566 insertions, 0 deletions
diff --git a/PhysX_3.4/Include/vehicle/PxVehicleDrive.h b/PhysX_3.4/Include/vehicle/PxVehicleDrive.h new file mode 100644 index 00000000..b77c8528 --- /dev/null +++ b/PhysX_3.4/Include/vehicle/PxVehicleDrive.h @@ -0,0 +1,566 @@ +// This code contains NVIDIA Confidential Information and is disclosed to you +// under a form of NVIDIA software license agreement provided separately to you. +// +// Notice +// NVIDIA Corporation and its licensors retain all intellectual property and +// proprietary rights in and to this software and related documentation and +// any modifications thereto. Any use, reproduction, disclosure, or +// distribution of this software and related documentation without an express +// license agreement from NVIDIA Corporation is strictly prohibited. +// +// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES +// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO +// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, +// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Information and code furnished is believed to be accurate and reliable. +// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such +// information or for any infringement of patents or other rights of third parties that may +// result from its use. No license is granted by implication or otherwise under any patent +// or patent rights of NVIDIA Corporation. Details are subject to change without notice. +// This code supersedes and replaces all information previously supplied. +// NVIDIA Corporation products are not authorized for use as critical +// components in life support devices or systems without express written approval of +// NVIDIA Corporation. +// +// Copyright (c) 2008-2016 NVIDIA Corporation. All rights reserved. +// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. +// Copyright (c) 2001-2004 NovodeX AG. All rights reserved. + +#ifndef PX_VEHICLE_DRIVE_H +#define PX_VEHICLE_DRIVE_H +/** \addtogroup vehicle + @{ +*/ + +#include "vehicle/PxVehicleWheels.h" +#include "vehicle/PxVehicleComponents.h" + +#if !PX_DOXYGEN +namespace physx +{ +#endif + +struct PxFilterData; +class PxGeometry; +class PxPhysics; +class PxBatchQuery; +class PxVehicleDrivableSurfaceToTireFrictionPairs; +class PxShape; +class PxMaterial; +class PxRigidDynamic; + +/** +\brief Data structure describing non-wheel configuration data of a vehicle that has engine, gears, clutch, and auto-box. +@see PxVehicleWheelsSimData for wheels configuration data. +*/ +class PxVehicleDriveSimData +{ +//= ATTENTION! ===================================================================================== +// Changing the data layout of this class breaks the binary serialization format. See comments for +// PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData +// function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION +// accordingly. +//================================================================================================== +public: + + friend class PxVehicleDriveTank; + + /** + \brief Return the engine data + */ + PX_FORCE_INLINE const PxVehicleEngineData& getEngineData() const + { + return mEngine; + } + + /** + \brief Set the engine data + \param[in] engine - the data stored in engine is copied to the vehicle's engine. + */ + void setEngineData(const PxVehicleEngineData& engine); + + /** + \brief Return the gears data + */ + PX_FORCE_INLINE const PxVehicleGearsData& getGearsData() const + { + return mGears; + } + + /** + \brief Set the gears data + \param[in] gears - the data stored in gears is copied to the vehicle's gears. + */ + void setGearsData(const PxVehicleGearsData& gears); + + /** + \brief Return the clutch data + */ + PX_FORCE_INLINE const PxVehicleClutchData& getClutchData() const + { + return mClutch; + } + + /** + \brief Set the clutch data + \param[in] clutch - the data stored in clutch is copied to the vehicle's clutch. + */ + void setClutchData(const PxVehicleClutchData& clutch); + + /** + \brief Return the autobox data + */ + PX_FORCE_INLINE const PxVehicleAutoBoxData& getAutoBoxData() const + { + return mAutoBox; + } + + /** + \brief Set the autobox data + \param[in] autobox - the data stored in autobox is copied to the vehicle's autobox. + */ + void setAutoBoxData(const PxVehicleAutoBoxData& autobox); + +protected: + /* + \brief Engine simulation data + @see setEngineData, getEngineData + */ + PxVehicleEngineData mEngine; + + /* + \brief Gear simulation data + @see setGearsData, getGearsData + */ + PxVehicleGearsData mGears; + + /* + \brief Clutch simulation data + @see setClutchData, getClutchData + */ + PxVehicleClutchData mClutch; + + /* + \brief Autobox simulation data + @see setAutoboxData, getAutoboxData + */ + PxVehicleAutoBoxData mAutoBox; + + /** + \brief Test that a PxVehicleDriveSimData instance has been configured with legal data. + Call only after setting all components with setEngineData,setGearsData,setClutchData,setAutoBoxData + @see PxVehicleDrive4W::setup, PxVehicleDriveTank::setup + */ + bool isValid() const; + + +//serialization +public: + PxVehicleDriveSimData() {} + PxVehicleDriveSimData(const PxEMPTY) : mEngine(PxEmpty), mGears(PxEmpty), mClutch(PxEmpty), mAutoBox(PxEmpty) {} + static void getBinaryMetaData(PxOutputStream& stream); +//~serialization +}; +PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDriveSimData) & 15)); + + +/** +\brief Data structure with instanced dynamics data for vehicle with engine, clutch, gears, autobox +@see PxVehicleWheelsDynData for wheels dynamics data. +*/ +class PxVehicleDriveDynData +{ +public: + + enum + { + eMAX_NB_ANALOG_INPUTS=16 + }; + + friend class PxVehicleDrive; + + /** + \brief Set all dynamics data to zero to bring the vehicle to rest. + */ + void setToRestState(); + + /** + \brief Set an analog control value to drive the vehicle. + \param[in] type describes the type of analog control being modified + \param[in] analogVal is the new value of the specific analog control. + @see PxVehicleDrive4WControl, PxVehicleDriveNWControl, PxVehicleDriveTankControl + */ + void setAnalogInput(const PxU32 type, const PxReal analogVal); + + /** + \brief Get the analog control value that has been applied to the vehicle. + \return The value of the specified analog control value. + @see PxVehicleDrive4WControl, PxVehicleDriveNWControl, PxVehicleDriveTankControl + */ + PxReal getAnalogInput(const PxU32 type) const; + + /** + \brief Inform the vehicle that the gear-up button has been pressed. + + \param[in] digitalVal is the state of the gear-up button. + + \note If digitalVal is true the vehicle will attempt to initiate a gear change at the next call to PxVehicleUpdates. + + \note The value of mGearUpPressed is not reset by PxVehicleUpdates + */ + void setGearUp(const bool digitalVal) + { + mGearUpPressed = digitalVal; + } + + /** + \brief Set that the gear-down button has been pressed. + + \param[in] digitalVal is the state of the gear-down button. + + \note If digitalVal is true the vehicle will attempt to initiate a gear change at the next call to PxVehicleUpdates. + + \note The value of mGearDownPressed is not reset by PxVehicleUpdates + */ + void setGearDown(const bool digitalVal) + { + mGearDownPressed = digitalVal; + } + + /** + \brief Check if the gear-up button has been pressed + \return The state of the gear-up button. + */ + bool getGearUp() const + { + return mGearUpPressed; + } + + /** + \brief Check if the gear-down button has been pressed + \return The state of the gear-down button. + */ + bool getGearDown() const + { + return mGearDownPressed; + } + + /** + \brief Set the flag that will be used to select auto-gears + If useAutoGears is true the auto-box will be active. + \param[in] useAutoGears is the active state of the auto-box. + */ + PX_FORCE_INLINE void setUseAutoGears(const bool useAutoGears) + { + mUseAutoGears=useAutoGears; + } + + /** + \brief Get the flag status that is used to select auto-gears + \return The active status of the auto-box. + */ + PX_FORCE_INLINE bool getUseAutoGears() const + { + return mUseAutoGears; + } + + /** + \brief Toggle the auto-gears flag + If useAutoGears is true the auto-box will be active. + */ + PX_FORCE_INLINE void toggleAutoGears() + { + mUseAutoGears = !mUseAutoGears; + } + + /** + \brief Set the current gear. + + \param[in] currentGear is the vehicle's gear. + + \note If the target gear is different from the current gear the vehicle will + attempt to start a gear change from the current gear that has just been set + towards the target gear at the next call to PxVehicleUpdates. + + @see setTargetGear, PxVehicleGearsData + */ + PX_FORCE_INLINE void setCurrentGear(PxU32 currentGear) + { + mCurrentGear = currentGear; + } + + /** + \brief Get the current gear. + + \return The vehicle's current gear. + + @see getTargetGear, PxVehicleGearsData + */ + PX_FORCE_INLINE PxU32 getCurrentGear() const + { + return mCurrentGear; + } + + /** + \brief Set the target gear. + + \param[in] targetGear is the vehicle's target gear. + + \note If the target gear is different from the current gear the vehicle will + attempt to start a gear change towards the target gear at the next call to + PxVehicleUpdates. + + @see PxVehicleGearsData + */ + PX_FORCE_INLINE void setTargetGear(PxU32 targetGear) + { + mTargetGear = targetGear; + } + + /** + \brief Get the target gear. + + \return The vehicle's target gear. + + @see setTargetGear, PxVehicleGearsData + */ + PX_FORCE_INLINE PxU32 getTargetGear() const + { + return mTargetGear; + } + + /** + \brief Start a gear change to a target gear. + + \param[in] targetGear is the gear the vehicle will begin a transition towards. + + \note The gear change will begin at the next call to PxVehicleUpadates. + + @see PxVehicleGearsData + */ + PX_FORCE_INLINE void startGearChange(const PxU32 targetGear) + { + mTargetGear=targetGear; + } + + /** + \brief Force an immediate gear change to a target gear + + \param[in] targetGear is the gear the vehicle will be given immediately. + + @see PxVehicleGearsData + */ + PX_FORCE_INLINE void forceGearChange(const PxU32 targetGear) + { + mTargetGear=targetGear; + mCurrentGear=targetGear; + } + + /** + \brief Set the rotation speed of the engine (radians per second) + + \param[in] speed is the rotational speed (radians per second) to apply to the engine. + */ + PX_FORCE_INLINE void setEngineRotationSpeed(const PxF32 speed) + { + mEnginespeed = speed; + } + + /** + \brief Return the rotation speed of the engine (radians per second) + + \return The rotational speed (radians per second) of the engine. + */ + PX_FORCE_INLINE PxReal getEngineRotationSpeed() const + { + return mEnginespeed; + } + + /** + \brief Return the time that has passed since the current gear change was initiated. + + \return The time that has passed since the current gear change was initiated. + + \note If no gear change is in process the gear switch time will be zero. + + @see PxVehicleGearsData.mSwitchTime + */ + PX_FORCE_INLINE PxReal getGearSwitchTime() const + { + return mGearSwitchTime; + } + + /** + \brief Return the time that has passed since the autobox last initiated a gear change. + + \return The time that has passed since the autobox last initiated a gear change. + + @see PxVehicleAutoBoxData::setLatency, PxVehicleAutoBoxData::getLatency + */ + PX_FORCE_INLINE PxReal getAutoBoxSwitchTime() const + { + return mAutoBoxSwitchTime; + } + + /** + \brief All dynamic data values are public for fast access. + */ + + + /** + \brief Analog control values used by vehicle simulation. + @see setAnalogInput, getAnalogInput, PxVehicleDrive4WControl, PxVehicleDriveNWControl, PxVehicleDriveTankControl + */ + PxReal mControlAnalogVals[eMAX_NB_ANALOG_INPUTS]; + + /** + \brief Auto-gear flag used by vehicle simulation. Set true to enable the autobox, false to disable the autobox. + @see setUseAutoGears, setUseAutoGears, toggleAutoGears, PxVehicleAutoBoxData + */ + bool mUseAutoGears; + + /** + \brief Gear-up digital control value used by vehicle simulation. + + \note If true a gear change will be initiated towards currentGear+1 (or to first gear if in reverse). + + @see setDigitalInput, getDigitalInput + */ + bool mGearUpPressed; + + /** + \brief Gear-down digital control value used by vehicle simulation. + + \note If true a gear change will be initiated towards currentGear-1 (or to reverse if in first). + + @see setDigitalInput, getDigitalInput + */ + bool mGearDownPressed; + + /** + \brief Current gear + @see startGearChange, forceGearChange, getCurrentGear, PxVehicleGearsData + */ + PxU32 mCurrentGear; + + /** + \brief Target gear (different from current gear if a gear change is underway) + @see startGearChange, forceGearChange, getTargetGear, PxVehicleGearsData + */ + PxU32 mTargetGear; + + /** + \brief Rotation speed of engine + @see setToRestState, getEngineRotationSpeed + */ + PxReal mEnginespeed; + + /** + \brief Reported time that has passed since gear change started. + @see setToRestState, startGearChange, PxVehicleGearsData::mSwitchTime + */ + PxReal mGearSwitchTime; + + /** + \brief Reported time that has passed since last autobox gearup/geardown decision. + @see setToRestState, PxVehicleAutoBoxData::setLatency + */ + PxReal mAutoBoxSwitchTime; + +private: + PxU32 mPad[2]; + + /** + \brief Test that a PxVehicleDriveDynData instance has legal values. + @see setToRestState + */ + bool isValid() const; + +//serialization +public: + PxVehicleDriveDynData(); + PxVehicleDriveDynData(const PxEMPTY) {} + PxU32 getNbAnalogInput() const { return eMAX_NB_ANALOG_INPUTS; } + PX_FORCE_INLINE void setGearChange(const PxU32 gearChange) { mTargetGear= gearChange; } + PX_FORCE_INLINE PxU32 getGearChange() const { return mTargetGear; } + PX_FORCE_INLINE void setGearSwitchTime(const PxReal switchTime) { mGearSwitchTime = switchTime; } + PX_FORCE_INLINE void setAutoBoxSwitchTime(const PxReal autoBoxSwitchTime) { mAutoBoxSwitchTime = autoBoxSwitchTime; } +//~serialization +}; +PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDriveDynData) & 15)); + +/** +\brief A complete vehicle with instance dynamics data and configuration data for wheels and engine,clutch,gears,autobox. +@see PxVehicleDrive4W, PxVehicleDriveTank +*/ +class PxVehicleDrive : public PxVehicleWheels +{ +//= ATTENTION! ===================================================================================== +// Changing the data layout of this class breaks the binary serialization format. See comments for +// PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData +// function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION +// accordingly. +//================================================================================================== +public: + + friend class PxVehicleUpdate; + + /** + \brief Dynamics data of vehicle instance. + @see setup + */ + PxVehicleDriveDynData mDriveDynData; + +protected: + + /** + \brief Test that all instanced dynamics data and configuration data have legal values. + */ + bool isValid() const; + + /** + \brief Set vehicle to rest. + */ + void setToRestState(); + + /** + @see PxVehicleDrive4W::allocate, PxVehicleDriveTank::allocate + */ + static PxU32 computeByteSize(const PxU32 numWheels); + static PxU8* patchupPointers(const PxU32 nbWheels, PxVehicleDrive* vehDrive, PxU8* ptr); + virtual void init(const PxU32 numWheels); + + /** + \brief Deallocate a PxVehicle4WDrive instance. + @see PxVehicleDrive4W::free, PxVehicleDriveTank::free + */ + void free(); + + /** + @see PxVehicleDrive4W::setup, PxVehicleDriveTank::setup + */ + void setup + (PxPhysics* physics, PxRigidDynamic* vehActor, + const PxVehicleWheelsSimData& wheelsData, + const PxU32 nbDrivenWheels, const PxU32 nbNonDrivenWheels); + +//serialization +public: + static void getBinaryMetaData(PxOutputStream& stream); + PxVehicleDrive(PxBaseFlags baseFlags) : PxVehicleWheels(baseFlags), mDriveDynData(PxEmpty) {} + virtual const char* getConcreteTypeName() const { return "PxVehicleDrive"; } +protected: + PxVehicleDrive(PxType concreteType, PxBaseFlags baseFlags) : PxVehicleWheels(concreteType, baseFlags) {} + ~PxVehicleDrive() {} + virtual bool isKindOf(const char* name) const { return !::strcmp("PxVehicleDrive", name) || PxBase::isKindOf(name); } +//~serialization +}; +PX_COMPILE_TIME_ASSERT(0==(sizeof(PxVehicleDrive) & 15)); + +#if !PX_DOXYGEN +} // namespace physx +#endif + +/** @} */ +#endif //PX_VEHICLE_DRIVE_H |