16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-20 05:39:18 +02:00

build 170505. stl-based speed table replacement

This commit is contained in:
tmj-fstate
2017-05-05 15:09:40 +02:00
parent 473837395c
commit 4977f0da17
4 changed files with 668 additions and 364 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -102,6 +102,7 @@ enum TAction
enum TSpeedPosFlag
{ // wartości dla iFlag w TSpeedPos
spNone = 0x0,
spEnabled = 0x1, // pozycja brana pod uwagę
spTrack = 0x2, // to jest tor
spReverse = 0x4, // odwrotnie
@@ -126,11 +127,11 @@ enum TSpeedPosFlag
class TSpeedPos
{ // pozycja tabeli prędkości dla AI
public:
double fDist; // aktualna odległość (ujemna gdy minięte)
double fVelNext; // prędkość obowiązująca od tego miejsca
double fSectionVelocityDist; // długość ograniczenia prędkości
double fDist{ 0.0 }; // aktualna odległość (ujemna gdy minięte)
double fVelNext{ -1.0 }; // prędkość obowiązująca od tego miejsca
double fSectionVelocityDist{ 0.0 }; // długość ograniczenia prędkości
// double fAcc;
int iFlags; // flagi typu wpisu do tabelki
int iFlags{ spNone }; // flagi typu wpisu do tabelki
// 1=istotny,2=tor,4=odwrotnie,8-zwrotnica (może się zmienić),16-stan
// zwrotnicy,32-minięty,64=koniec,128=łuk
// 0x100=event,0x200=manewrowa,0x400=przystanek,0x800=SBL,0x1000=wysłana komenda,0x2000=W5
@@ -138,8 +139,8 @@ class TSpeedPos
vector3 vPos; // współrzędne XYZ do liczenia odległości
struct
{
TTrack *trTrack; // wskaźnik na tor o zmiennej prędkości (zwrotnica, obrotnica)
TEvent *evEvent; // połączenie z eventem albo komórką pamięci
TTrack *trTrack{ nullptr }; // wskaźnik na tor o zmiennej prędkości (zwrotnica, obrotnica)
TEvent *evEvent{ nullptr }; // połączenie z eventem albo komórką pamięci
};
void CommandCheck();
@@ -166,16 +167,25 @@ extern bool WriteLogFlag; // logowanie parametrów fizycznych
class TController
{
private: // obsługa tabelki prędkości (musi mieć możliwość odhaczania stacji w rozkładzie)
#ifdef EU07_USE_OLD_SPEEDTABLE
TSpeedPos *sSpeedTable = nullptr; // najbliższe zmiany prędkości
int iSpeedTableSize = 16; // wielkość tabelki
int iFirst = 0; // aktualna pozycja w tabeli (modulo iSpeedTableSize)
int iLast = 0; // ostatnia wypełniona pozycja w tabeli <iFirst (modulo iSpeedTableSize)
int iTableDirection = 0; // kierunek zapełnienia tabelki względem pojazdu z AI
#else
int iLast{ 0 }; // ostatnia wypełniona pozycja w tabeli <iFirst (modulo iSpeedTableSize)
int iTableDirection{ 0 }; // kierunek zapełnienia tabelki względem pojazdu z AI
std::vector<TSpeedPos> sSpeedTable;
#endif
double fLastVel = 0.0; // prędkość na poprzednio sprawdzonym torze
TTrack *tLast = nullptr; // ostatni analizowany tor
TEvent *eSignSkip = nullptr; // można pominąć ten SBL po zatrzymaniu
#ifdef EU07_USE_OLD_SPEEDTABLE
TSpeedPos *sSemNext = nullptr; // następny semafor na drodze zależny od trybu jazdy
TSpeedPos *sSemNextStop = nullptr; // następny semafor na drodze zależny od trybu jazdy i na stój
#else
std::size_t SemNextIndex{ -1 };
std::size_t SemNextStopIndex{ -1 };
#endif
private: // parametry aktualnego składu
double fLength = 0.0; // długość składu (do wyciągania z ograniczeń)
double fMass = 0.0; // całkowita masa do liczenia stycznej składowej grawitacji
@@ -358,13 +368,15 @@ class TController
TEvent *CheckTrackEvent(double fDirection, TTrack *Track);
bool TableCheckEvent(TEvent *e);
bool TableAddNew();
bool TableNotFound(TEvent *e);
bool TableNotFound(TEvent const *Event) const;
void TableClear();
TEvent *TableCheckTrackEvent(double fDirection, TTrack *Track);
void TableTraceRoute(double fDistance, TDynamicObject *pVehicle = NULL);
void TableCheck(double fDistance);
TCommandType TableUpdate(double &fVelDes, double &fDist, double &fNext, double &fAcc);
void TablePurger();
public:
std::size_t TableSize() const { return sSpeedTable.size(); }
private: // Ra: stare funkcje skanujące, używane do szukania sygnalizatora z tyłu
bool BackwardTrackBusy(TTrack *Track);
@@ -395,9 +407,9 @@ class TController
};
void MoveTo(TDynamicObject *to);
void DirectionInitial();
std::string TableText(int i);
std::string TableText(std::size_t const Index);
int CrossRoute(TTrack *tr);
void RouteSwitch(int d);
std::string OwnerName();
std::string OwnerName() const;
TMoverParameters const *Controlling() const { return mvControlling; }
};

View File

@@ -2562,7 +2562,7 @@ void TTrain::OnCommand_doortoggleleft( TTrain *Train, command_data const &Comman
if( Train->ggDoorLeftButton.GetValue() > 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
Train->play_sound( Train->dsbDoorOpen );
Train->play_sound( Train->dsbDoorClose );
}
}
else {
@@ -2573,7 +2573,7 @@ void TTrain::OnCommand_doortoggleleft( TTrain *Train, command_data const &Comman
if( Train->ggDoorRightButton.GetValue() > 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
Train->play_sound( Train->dsbDoorOpen );
Train->play_sound( Train->dsbDoorClose );
}
}
}
@@ -2623,7 +2623,7 @@ void TTrain::OnCommand_doortoggleright( TTrain *Train, command_data const &Comma
if( Train->ggDoorRightButton.GetValue() > 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
Train->play_sound( Train->dsbDoorOpen );
Train->play_sound( Train->dsbDoorClose );
}
}
else {
@@ -2634,7 +2634,7 @@ void TTrain::OnCommand_doortoggleright( TTrain *Train, command_data const &Comma
if( Train->ggDoorLeftButton.GetValue() > 0.5 ) {
Train->play_sound( Train->dsbSwitch );
}
Train->play_sound( Train->dsbDoorOpen );
Train->play_sound( Train->dsbDoorClose );
}
}
}

View File

@@ -1935,13 +1935,13 @@ TWorld::Update_UI() {
break;
}
int i = 0;
std::size_t i = 0; std::size_t const speedtablesize = std::min( 30, std::max( 0, static_cast<int>(tmp->Mechanik->TableSize()) - 1 ) );
do {
std::string scanline = tmp->Mechanik->TableText( i );
if( scanline.empty() ) { break; }
UITable->text_lines.emplace_back( Global::Bezogonkow( scanline ), Global::UITextColor );
++i;
} while( i < 16 ); // TController:iSpeedTableSize TODO: change when the table gets recoded
} while( i < speedtablesize ); // TController:iSpeedTableSize TODO: change when the table gets recoded
}
}
else {
@@ -2039,8 +2039,8 @@ TWorld::Update_UI() {
}
uitextline1 =
"vel: " + to_string(tmp->GetVelocity(), 2) + " km/h"
+ "; dist: " + to_string(tmp->MoverParameters->DistCounter, 2) + " km"
"vel: " + to_string( tmp->GetVelocity(), 2 ) + " km/h" + ( tmp->MoverParameters->SlippingWheels ? " (!)" : "" )
+ "; dist: " + to_string( tmp->MoverParameters->DistCounter, 2 ) + " km"
+ "; pos: ("
+ to_string( tmp->GetPosition().x, 2 ) + ", "
+ to_string( tmp->GetPosition().y, 2 ) + ", "
@@ -2573,7 +2573,7 @@ world_environment::update() {
m_moon.update();
// ...determine source of key light and adjust global state accordingly...
auto const sunlightlevel = m_sun.getIntensity();
auto const moonlightlevel = m_moon.getIntensity();
auto const moonlightlevel = m_moon.getIntensity() * 0.65f; // scaled down by arbitrary factor, it's pretty bright otherwise
float keylightintensity;
float twilightfactor;
float3 keylightcolor;