// A clutch for the drivetrain.
//
// Copyright (C) 2001-2019 Sam Varner
//
// This file is part of Vamos Automotive Simulator.
//
// Vamos 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.
//
// Vamos 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 Vamos. If not, see <http://www.gnu.org/licenses/>.
#ifndef _CLUTCH_H_
#define _CLUTCH_H_
namespace Vamos_Body
{
/// A clutch for the drivetrain.
class Clutch
{
public:
Clutch(double sliding, double radius, double area, double max_pressure);
/// @return The drag caused by friction between the clutch plates.
double drag(double engine_speed, double drive_speed);
/// Set the pressure on the plates.
/// @param factor The fraction of the maximum pressure.
void position(double factor);
/// @return The current pressure.
double pressure() const { return m_pressure; }
/// @return True if the clutch is fully engaged, false otherwise.
bool engaged() const { return m_engaged; }
private:
/// The coefficient of friction for the clutch plates.
double m_sliding_friction;
/// The effective radius of the clutch plates.
double m_radius;
/// The contact area.
double m_area;
/// The current pressure on the plates.
double m_pressure = 0.0;
/// The maximum allowed pressure on the plates.
double m_max_pressure;
/// true if the clutch is fully engaged, false otherwise.
bool m_engaged = false;
};
} // namespace Vamos_Body
#endif // not _CLUTCH_H_