/** * @file Zusi 3 Antrieb DLL Test * @author Jonathan Pilborough / jonathanp */ #include "AntriebModel.h" #include 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(ZUGKRAFT_MAX); } float AntriebModel::LeseAntriebskraft() const { return mZugKraft; } float AntriebModel::LeseFahrstufe() const { return mFahrstufe; }