ai departure logic tweak, minor bug fixes

This commit is contained in:
tmj-fstate
2019-11-07 00:30:00 +01:00
parent a74402804d
commit 71098a7254
5 changed files with 27 additions and 19 deletions

View File

@@ -1029,8 +1029,11 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
if (TrainParams.StationIndex < TrainParams.StationCount) {
// jeśli są dalsze stacje, czekamy do godziny odjazdu
if (TrainParams.IsTimeToGo(simulation::Time.data().wHour, simulation::Time.data().wMinute + simulation::Time.data().wSecond*0.0167 )) {
if ( ( true == IsCargoTrain )
|| ( true == TrainParams.IsMaintenance() )
|| ( TrainParams.IsTimeToGo( simulation::Time.data().wHour, simulation::Time.data().wMinute + simulation::Time.data().wSecond*0.0167 ) ) ) {
// z dalszą akcją czekamy do godziny odjazdu
// cargo trains and passenger trains at maintenance stop don't need to wait
IsAtPassengerStop = false;
// przy jakim dystansie (stanie licznika) ma przesunąć na następny postój
fLastStopExpDist = mvOccupied->DistCounter + 0.050 + 0.001 * fLength;

View File

@@ -8363,6 +8363,8 @@ void TTrain::set_cab_controls( int const Cab ) {
1.f :
0.f );
}
// radio
ggRadioVolumeSelector.PutValue( Global.RadioVolume );
// we reset all indicators, as they're set during the update pass
// TODO: when cleaning up break setting indicator state into a separate function, so we can reuse it

View File

@@ -138,6 +138,8 @@ driverkeyboard_input::default_bindings() {
{ user_command::radiostopsend, GLFW_KEY_PAUSE | keymodifier::shift | keymodifier::control },
{ user_command::radiostoptest, GLFW_KEY_R | keymodifier::shift | keymodifier::control },
{ user_command::radiocall3send, GLFW_KEY_BACKSPACE },
// radiovolumeincrease,
// radiovolumedecrease,
{ user_command::cabchangeforward, GLFW_KEY_HOME },
{ user_command::cabchangebackward, GLFW_KEY_END },
// viewturn,

View File

@@ -50,6 +50,13 @@ bool TTrainParameters::IsStop() const
return true; // na ostatnim się zatrzymać zawsze
}
bool TTrainParameters::IsMaintenance() const {
if( ( StationIndex < StationCount ) )
return TimeTable[ StationIndex ].is_maintenance;
else
return false;
}
bool TTrainParameters::UpdateMTable( scenario_time const &Time, std::string const &NewName ) {
return UpdateMTable( Time.data().wHour, Time.data().wMinute + Time.data().wSecond * 0.0167, NewName );
@@ -399,6 +406,7 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
|| ( s == "2" )
|| fin.bad() ) ) {
record->StationWare += s;
record->is_maintenance = ( s.find( "pt" ) != std::string::npos );
fin >> s;
}
record->TrackNo = atoi(s.c_str());

View File

@@ -24,27 +24,19 @@ static char const *hrsd = ".";
struct TMTableLine
{
float km; // kilometraz linii
float vmax; // predkosc rozkladowa przed przystankiem
float km{ 0.f }; // kilometraz linii
float vmax{ -1.f }; // predkosc rozkladowa przed przystankiem
// StationName:string[32]; //nazwa stacji ('_' zamiast spacji)
// StationWare:string[32]; //typ i wyposazenie stacji, oddz. przecinkami}
std::string StationName; // nazwa stacji ('_' zamiast spacji)
std::string StationName{ "nowhere" }; // nazwa stacji ('_' zamiast spacji)
std::string StationWare; // typ i wyposazenie stacji, oddz. przecinkami}
int TrackNo; // ilosc torow szlakowych
int Ah;
float Am; // godz. i min. przyjazdu, -1 gdy bez postoju
int Dh;
float Dm; // godz. i min. odjazdu
float tm; // czas jazdy do tej stacji w min. (z kolumny)
TMTableLine()
{
km = 0;
vmax = -1;
StationName = "nowhere", StationWare = "";
TrackNo = 1;
Ah = Am = Dh = Dm = -1;
tm = 0;
}
int TrackNo{ 1 }; // ilosc torow szlakowych
int Ah{ -1 };
float Am{ -1.f }; // godz. i min. przyjazdu, -1 gdy bez postoju
int Dh{ -1 };
float Dm{ -1.f }; // godz. i min. odjazdu
float tm{ 0.f }; // czas jazdy do tej stacji w min. (z kolumny)
bool is_maintenance{ false };
};
typedef TMTableLine TMTable[MaxTTableSize + 1];
@@ -73,6 +65,7 @@ class TTrainParameters
double WatchMTable(double DistCounter);
std::string NextStop() const;
bool IsStop() const;
bool IsMaintenance() const;
bool IsTimeToGo(double hh, double mm);
bool UpdateMTable(double hh, double mm, std::string const &NewName);
bool UpdateMTable( scenario_time const &Time, std::string const &NewName );