#ifndef Physics_Vehicle_h__ #define Physics_Vehicle_h__ //#include "PrecompiledHeader.h" #include #include #include #include #include #include #include #include // Vehicle page 425 in documentation #include #include #include #include #include #include #include #include #include #include #include #include #include #include "World.h" #include "Components/Vehicle.h" #include "Components/Wheel.h" #include "Components/Transform.h" /// Tank specific steering implementation. Rear wheels steer in opposite direction /// to front wheels. class TankSteering: public hkpVehicleDefaultSteering { public: virtual void calcSteering(const hkReal deltaTime, const hkpVehicleInstance* vehicle, const hkpVehicleDriverInput::FilteredDriverInputOutput& filteredInfoOutput, SteeringAnglesOutput& steeringOutput ) { hkpVehicleDefaultSteering::calcMainSteeringAngle( deltaTime, vehicle, filteredInfoOutput, steeringOutput ); // Wheels. for (int w_it = 0; w_it < m_doesWheelSteer.getSize(); w_it++) { if ( m_doesWheelSteer[w_it] ) { steeringOutput.m_wheelsSteeringAngle [w_it] = steeringOutput.m_mainSteeringAngle; } else { // Steer with front and back wheels to simulate a tank. steeringOutput.m_wheelsSteeringAngle [w_it] = -steeringOutput.m_mainSteeringAngle; } } } }; class VehicleSetup { public: virtual void VehicleSetup::buildVehicle(World *world, const hkpWorld* physicsWorld, hkpVehicleInstance& vehicle, EntityID vehicleEntity, std::vector wheelEntities); public: struct WheelData { Components::Wheel* WheelComponent; Components::Transform* TransformComponent; }; std::vector m_Wheels; virtual void setupVehicleData(const hkpWorld* world, hkpVehicleData& data); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultAnalogDriverInput& driverInput); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultEngine& engine, Components::Vehicle vehicleComponent); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultSteering& steering, Components::Vehicle vehicleComponent); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultTransmission& transmission, Components::Vehicle vehicleComponent); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultBrake& brake, Components::Vehicle vehicleComponent ); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultSuspension& suspension, Components::Vehicle vehicleComponent); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultAerodynamics& aerodynamics, Components::Vehicle vehicleComponent ); virtual void setupComponent(const hkpVehicleData& data, hkpVehicleDefaultVelocityDamper& velocityDamper, Components::Vehicle vehicleComponent); virtual void setupWheelCollide(const hkpWorld* world, const hkpVehicleInstance& vehicle, hkpVehicleRayCastWheelCollide& wheelCollide); }; #endif // Physics_Vehicle_h__