You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.1 KiB

/**
* @file Zusi 3 Antrieb DLL Test
* @author Jonathan Pilborough / jonathanp
*/
#include "AntriebModel.h"
#include <cmath>
AntriebModel::AntriebModel(int variant) : mVariant(variant), mFahrstufe(0.0f), mZugKraft(0.0f)
{
}
void AntriebModel::Bedienung(AntriebsRenderModus antriebsRenderModus, ProtokollFst* prot, float sp)
{
if (prot->rischa.funktion == KSF_RischaR || prot->rischa.funktion == KSF_RischaV)
{
if (mVariant == 0)
{
if (prot->schaltstufenSteller.funktion == KSF_FahrstufeX)
{
mFahrstufe = prot->schaltstufenSteller.parameter * 100.0f;
}
}
else if (mVariant == 1)
{
if (prot->zugkraftSteller.funktion == KSF_ZugkraftX)
{
mFahrstufe = prot->zugkraftSteller.parameter * 100.0f;
}
}
}
else
{
mZugKraft = 0.0f;
}
if (prot->hauptschalter.funktion == KSF_HauptschalterAus)
mHauptschalterAus = 1;
else if (prot->hauptschalter.funktion == KSF_HauptschalterEin)
{
if (mVariant == 0)
{
if ((mZugKraft == 0.0f) && ((prot->schaltstufenSteller.funktion == KSF_FahrstufeSchnellAus) || ((prot->schaltstufenSteller.funktion == KSF_FahrstufeX) && (prot->schaltstufenSteller.parameter == 0))))
mHauptschalterAus = 0;
}
else if (mVariant == 1)
{
if ((mZugKraft == 0.0f) && ((prot->zugkraftSteller.funktion == KSF_ZugkraftSchnellAus) || ((prot->zugkraftSteller.funktion == KSF_ZugkraftX) && (prot->zugkraftSteller.parameter == 0))))
mHauptschalterAus = 0;
}
}
prot->ftdIntern[18] = (mZugKraft == 0.0f) ? 1.0f : 0.0f; // Lichtmelder
prot->ftdIntern[19] = sqrt(abs(sp)); // Spielen Rollsound
}
void AntriebModel::Berechnung(double dt, AntriebsRenderModus antriebsRenderModus, Mehrfachtraktionsdaten mehrfachtraktionsdaten)
{
if (mHauptschalterAus == 0)
mZugKraft = (ZUGKRAFT_MAX / STUFEN) * mFahrstufe;
else
mZugKraft = 0.0;
}
void AntriebModel::VorspanntraktionsdatenSetzen(float sp, float sollLeistungNormiert)
{
mZugKraft = sollLeistungNormiert;
}
float AntriebModel::LeseMaxAntriebskraft(float spAkt) const
{
return static_cast<float>(ZUGKRAFT_MAX);
}
float AntriebModel::LeseAntriebskraft() const
{
return mZugKraft;
}
float AntriebModel::LeseFahrstufe() const
{
return mFahrstufe;
}