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.
86 lines
2.1 KiB
86 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;
|
|
}
|
|
|