mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-24 04:19:18 +02:00
dangling pointer crash semi-fix, minor bug fixes, minor code correctness enhancements
This commit is contained in:
@@ -361,13 +361,14 @@ void TAnimContainer::UpdateModelIK()
|
|||||||
{ // odwrotna kinematyka wyliczana dopiero po ustawieniu macierzy w submodelach
|
{ // odwrotna kinematyka wyliczana dopiero po ustawieniu macierzy w submodelach
|
||||||
if (pSubModel) // pozbyć się tego - sprawdzać wcześniej
|
if (pSubModel) // pozbyć się tego - sprawdzać wcześniej
|
||||||
{
|
{
|
||||||
if (pSubModel->b_Anim & at_IK)
|
if ((pSubModel->b_Anim == TAnimType::at_IK)
|
||||||
|
||(pSubModel->b_Anim == TAnimType::at_IK22))
|
||||||
{ // odwrotna kinematyka
|
{ // odwrotna kinematyka
|
||||||
float3 d, k;
|
float3 d, k;
|
||||||
TSubModel *ch = pSubModel->ChildGet();
|
TSubModel *ch = pSubModel->ChildGet();
|
||||||
switch (pSubModel->b_Anim)
|
switch (pSubModel->b_Anim)
|
||||||
{
|
{
|
||||||
case at_IK11: // stopa: ustawić w kierunku czubka (pierwszy potomny)
|
case TAnimType::at_IK11: // stopa: ustawić w kierunku czubka (pierwszy potomny)
|
||||||
d = ch->Translation1Get(); // wektor względem aktualnego układu (nie uwzględnia
|
d = ch->Translation1Get(); // wektor względem aktualnego układu (nie uwzględnia
|
||||||
// obrotu)
|
// obrotu)
|
||||||
k = float3(RadToDeg(atan2(d.z, hypot(d.x, d.y))), 0.0,
|
k = float3(RadToDeg(atan2(d.z, hypot(d.x, d.y))), 0.0,
|
||||||
@@ -377,7 +378,7 @@ void TAnimContainer::UpdateModelIK()
|
|||||||
// WriteLog("--> "+AnsiString(k.x)+" "+AnsiString(k.y)+" "+AnsiString(k.z));
|
// WriteLog("--> "+AnsiString(k.x)+" "+AnsiString(k.y)+" "+AnsiString(k.z));
|
||||||
// Ra: to już jest dobrze, może być inna ćwiartka i znak
|
// Ra: to już jest dobrze, może być inna ćwiartka i znak
|
||||||
break;
|
break;
|
||||||
case at_IK22: // udo: ustawić w kierunku pierwszej potomnej pierwszej potomnej (kostki)
|
case TAnimType::at_IK22: // udo: ustawić w kierunku pierwszej potomnej pierwszej potomnej (kostki)
|
||||||
// pozycję kostki należy określić względem kości centralnej (+biodro może być
|
// pozycję kostki należy określić względem kości centralnej (+biodro może być
|
||||||
// pochylone)
|
// pochylone)
|
||||||
// potem wyliczyć ewentualne odchylenie w tej i następnej
|
// potem wyliczyć ewentualne odchylenie w tej i następnej
|
||||||
|
|||||||
26
Camera.cpp
26
Camera.cpp
@@ -27,7 +27,7 @@ void TCamera::Init( Math3D::vector3 NPos, Math3D::vector3 NAngle) {
|
|||||||
Roll = NAngle.z;
|
Roll = NAngle.z;
|
||||||
Pos = NPos;
|
Pos = NPos;
|
||||||
|
|
||||||
Type = (Global.bFreeFly ? tp_Free : tp_Follow);
|
Type = (Global.bFreeFly ? TCameraType::tp_Free : TCameraType::tp_Follow);
|
||||||
};
|
};
|
||||||
|
|
||||||
void TCamera::Reset() {
|
void TCamera::Reset() {
|
||||||
@@ -76,12 +76,12 @@ TCamera::OnCommand( command_data const &Command ) {
|
|||||||
case user_command::movehorizontalfast: {
|
case user_command::movehorizontalfast: {
|
||||||
|
|
||||||
auto const movespeed = (
|
auto const movespeed = (
|
||||||
Type == tp_Free ? runspeed :
|
Type == TCameraType::tp_Free ? runspeed :
|
||||||
Type == tp_Follow ? walkspeed :
|
Type == TCameraType::tp_Follow ? walkspeed :
|
||||||
0.0 );
|
0.0 );
|
||||||
|
|
||||||
auto const speedmultiplier = (
|
auto const speedmultiplier = (
|
||||||
( ( Type == tp_Free ) && ( Command.command == user_command::movehorizontalfast ) ) ?
|
( ( Type == TCameraType::tp_Free ) && ( Command.command == user_command::movehorizontalfast ) ) ?
|
||||||
30.0 :
|
30.0 :
|
||||||
1.0 );
|
1.0 );
|
||||||
|
|
||||||
@@ -111,12 +111,12 @@ TCamera::OnCommand( command_data const &Command ) {
|
|||||||
case user_command::moveverticalfast: {
|
case user_command::moveverticalfast: {
|
||||||
|
|
||||||
auto const movespeed = (
|
auto const movespeed = (
|
||||||
Type == tp_Free ? runspeed * 0.5 :
|
Type == TCameraType::tp_Free ? runspeed * 0.5 :
|
||||||
Type == tp_Follow ? walkspeed :
|
Type == TCameraType::tp_Follow ? walkspeed :
|
||||||
0.0 );
|
0.0 );
|
||||||
|
|
||||||
auto const speedmultiplier = (
|
auto const speedmultiplier = (
|
||||||
( ( Type == tp_Free ) && ( Command.command == user_command::moveverticalfast ) ) ?
|
( ( Type == TCameraType::tp_Free ) && ( Command.command == user_command::moveverticalfast ) ) ?
|
||||||
10.0 :
|
10.0 :
|
||||||
1.0 );
|
1.0 );
|
||||||
|
|
||||||
@@ -145,8 +145,8 @@ TCamera::OnCommand( command_data const &Command ) {
|
|||||||
|
|
||||||
void TCamera::Update()
|
void TCamera::Update()
|
||||||
{
|
{
|
||||||
if( FreeFlyModeFlag == true ) { Type = tp_Free; }
|
if( FreeFlyModeFlag == true ) { Type = TCameraType::tp_Free; }
|
||||||
else { Type = tp_Follow; }
|
else { Type = TCameraType::tp_Follow; }
|
||||||
|
|
||||||
// check for sent user commands
|
// check for sent user commands
|
||||||
// NOTE: this is a temporary arrangement, for the transition period from old command setup to the new one
|
// NOTE: this is a temporary arrangement, for the transition period from old command setup to the new one
|
||||||
@@ -162,7 +162,7 @@ void TCamera::Update()
|
|||||||
auto const deltatime { Timer::GetDeltaRenderTime() }; // czas bez pauzy
|
auto const deltatime { Timer::GetDeltaRenderTime() }; // czas bez pauzy
|
||||||
|
|
||||||
// update position
|
// update position
|
||||||
if( ( Type == tp_Free )
|
if( ( Type == TCameraType::tp_Free )
|
||||||
|| ( false == Global.ctrlState )
|
|| ( false == Global.ctrlState )
|
||||||
|| ( true == DebugCameraFlag ) ) {
|
|| ( true == DebugCameraFlag ) ) {
|
||||||
// ctrl is used for mirror view, so we ignore the controls when in vehicle if ctrl is pressed
|
// ctrl is used for mirror view, so we ignore the controls when in vehicle if ctrl is pressed
|
||||||
@@ -172,7 +172,7 @@ void TCamera::Update()
|
|||||||
Velocity.y = clamp( Velocity.y + m_moverate.y * 10.0 * deltatime, -std::abs( m_moverate.y ), std::abs( m_moverate.y ) );
|
Velocity.y = clamp( Velocity.y + m_moverate.y * 10.0 * deltatime, -std::abs( m_moverate.y ), std::abs( m_moverate.y ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( Type == tp_Free )
|
if( ( Type == TCameraType::tp_Free )
|
||||||
|| ( true == DebugCameraFlag ) ) {
|
|| ( true == DebugCameraFlag ) ) {
|
||||||
// free movement position update is handled here, movement while in vehicle is handled by train update
|
// free movement position update is handled here, movement while in vehicle is handled by train update
|
||||||
Math3D::vector3 Vec = Velocity;
|
Math3D::vector3 Vec = Velocity;
|
||||||
@@ -193,7 +193,7 @@ void TCamera::Update()
|
|||||||
|
|
||||||
Pitch -= rotationfactor * m_rotationoffsets.x;
|
Pitch -= rotationfactor * m_rotationoffsets.x;
|
||||||
m_rotationoffsets.x *= ( 1.0 - rotationfactor );
|
m_rotationoffsets.x *= ( 1.0 - rotationfactor );
|
||||||
if( Type == tp_Follow ) {
|
if( Type == TCameraType::tp_Follow ) {
|
||||||
// jeżeli jazda z pojazdem ograniczenie kąta spoglądania w dół i w górę
|
// jeżeli jazda z pojazdem ograniczenie kąta spoglądania w dół i w górę
|
||||||
Pitch = clamp( Pitch, -M_PI_4, M_PI_4 );
|
Pitch = clamp( Pitch, -M_PI_4, M_PI_4 );
|
||||||
}
|
}
|
||||||
@@ -210,7 +210,7 @@ bool TCamera::SetMatrix( glm::dmat4 &Matrix ) {
|
|||||||
Matrix = glm::rotate( Matrix, -Pitch, glm::dvec3( 1.0, 0.0, 0.0 ) );
|
Matrix = glm::rotate( Matrix, -Pitch, glm::dvec3( 1.0, 0.0, 0.0 ) );
|
||||||
Matrix = glm::rotate( Matrix, -Yaw, glm::dvec3( 0.0, 1.0, 0.0 ) ); // w zewnętrznym widoku: kierunek patrzenia
|
Matrix = glm::rotate( Matrix, -Yaw, glm::dvec3( 0.0, 1.0, 0.0 ) ); // w zewnętrznym widoku: kierunek patrzenia
|
||||||
|
|
||||||
if( ( Type == tp_Follow ) && ( false == DebugCameraFlag ) ) {
|
if( ( Type == TCameraType::tp_Follow ) && ( false == DebugCameraFlag ) ) {
|
||||||
|
|
||||||
Matrix *= glm::lookAt(
|
Matrix *= glm::lookAt(
|
||||||
glm::dvec3{ Pos },
|
glm::dvec3{ Pos },
|
||||||
|
|||||||
2
Camera.h
2
Camera.h
@@ -13,7 +13,7 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
#include "command.h"
|
#include "command.h"
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
enum TCameraType
|
enum class TCameraType
|
||||||
{ // tryby pracy kamery
|
{ // tryby pracy kamery
|
||||||
tp_Follow, // jazda z pojazdem
|
tp_Follow, // jazda z pojazdem
|
||||||
tp_Free, // stoi na scenerii
|
tp_Free, // stoi na scenerii
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class TMtableTime; // czas dla danego posterunku
|
|||||||
|
|
||||||
class TController; // obiekt sterujący pociągiem (AI)
|
class TController; // obiekt sterujący pociągiem (AI)
|
||||||
|
|
||||||
enum TCommandType
|
enum class TCommandType
|
||||||
{ // binarne odpowiedniki komend w komórce pamięci
|
{ // binarne odpowiedniki komend w komórce pamięci
|
||||||
cm_Unknown, // ciąg nierozpoznany (nie jest komendą)
|
cm_Unknown, // ciąg nierozpoznany (nie jest komendą)
|
||||||
cm_Ready, // W4 zezwala na odjazd, ale semafor może zatrzymać
|
cm_Ready, // W4 zezwala na odjazd, ale semafor może zatrzymać
|
||||||
|
|||||||
240
Driver.cpp
240
Driver.cpp
@@ -201,12 +201,12 @@ void TSpeedPos::CommandCheck()
|
|||||||
double value2 = evEvent->ValueGet(2);
|
double value2 = evEvent->ValueGet(2);
|
||||||
switch (command)
|
switch (command)
|
||||||
{
|
{
|
||||||
case cm_ShuntVelocity:
|
case TCommandType::cm_ShuntVelocity:
|
||||||
// prędkość manewrową zapisać, najwyżej AI zignoruje przy analizie tabelki
|
// prędkość manewrową zapisać, najwyżej AI zignoruje przy analizie tabelki
|
||||||
fVelNext = value1; // powinno być value2, bo druga określa "za"?
|
fVelNext = value1; // powinno być value2, bo druga określa "za"?
|
||||||
iFlags |= spShuntSemaphor;
|
iFlags |= spShuntSemaphor;
|
||||||
break;
|
break;
|
||||||
case cm_SetVelocity:
|
case TCommandType::cm_SetVelocity:
|
||||||
// w semaforze typu "m" jest ShuntVelocity dla Ms2 i SetVelocity dla S1
|
// w semaforze typu "m" jest ShuntVelocity dla Ms2 i SetVelocity dla S1
|
||||||
// SetVelocity * 0 -> można jechać, ale stanąć przed
|
// SetVelocity * 0 -> można jechać, ale stanąć przed
|
||||||
// SetVelocity 0 20 -> stanąć przed, potem można jechać 20 (SBL)
|
// SetVelocity 0 20 -> stanąć przed, potem można jechać 20 (SBL)
|
||||||
@@ -222,31 +222,31 @@ void TSpeedPos::CommandCheck()
|
|||||||
iFlags |= spStopOnSBL; // flaga, że ma zatrzymać; na pewno nie zezwoli na manewry
|
iFlags |= spStopOnSBL; // flaga, że ma zatrzymać; na pewno nie zezwoli na manewry
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case cm_SectionVelocity:
|
case TCommandType::cm_SectionVelocity:
|
||||||
// odcinek z ograniczeniem prędkości
|
// odcinek z ograniczeniem prędkości
|
||||||
fVelNext = value1;
|
fVelNext = value1;
|
||||||
fSectionVelocityDist = value2;
|
fSectionVelocityDist = value2;
|
||||||
iFlags |= spSectionVel;
|
iFlags |= spSectionVel;
|
||||||
break;
|
break;
|
||||||
case cm_RoadVelocity:
|
case TCommandType::cm_RoadVelocity:
|
||||||
// prędkość drogowa (od tej pory będzie jako domyślna najwyższa)
|
// prędkość drogowa (od tej pory będzie jako domyślna najwyższa)
|
||||||
fVelNext = value1;
|
fVelNext = value1;
|
||||||
iFlags |= spRoadVel;
|
iFlags |= spRoadVel;
|
||||||
break;
|
break;
|
||||||
case cm_PassengerStopPoint:
|
case TCommandType::cm_PassengerStopPoint:
|
||||||
// nie ma dostępu do rozkładu
|
// nie ma dostępu do rozkładu
|
||||||
// przystanek, najwyżej AI zignoruje przy analizie tabelki
|
// przystanek, najwyżej AI zignoruje przy analizie tabelki
|
||||||
// if ((iFlags & spPassengerStopPoint) == 0)
|
// if ((iFlags & spPassengerStopPoint) == 0)
|
||||||
fVelNext = 0.0; // TrainParams->IsStop()?0.0:-1.0; //na razie tak
|
fVelNext = 0.0; // TrainParams->IsStop()?0.0:-1.0; //na razie tak
|
||||||
iFlags |= spPassengerStopPoint; // niestety nie da się w tym miejscu współpracować z rozkładem
|
iFlags |= spPassengerStopPoint; // niestety nie da się w tym miejscu współpracować z rozkładem
|
||||||
break;
|
break;
|
||||||
case cm_SetProximityVelocity:
|
case TCommandType::cm_SetProximityVelocity:
|
||||||
// musi zostać gdyż inaczej nie działają manewry
|
// musi zostać gdyż inaczej nie działają manewry
|
||||||
fVelNext = -1;
|
fVelNext = -1;
|
||||||
iFlags |= spProximityVelocity;
|
iFlags |= spProximityVelocity;
|
||||||
// fSectionVelocityDist = value2;
|
// fSectionVelocityDist = value2;
|
||||||
break;
|
break;
|
||||||
case cm_OutsideStation:
|
case TCommandType::cm_OutsideStation:
|
||||||
// w trybie manewrowym: skanować od niej wstecz i stanąć po wyjechaniu za sygnalizator i
|
// w trybie manewrowym: skanować od niej wstecz i stanąć po wyjechaniu za sygnalizator i
|
||||||
// zmienić kierunek
|
// zmienić kierunek
|
||||||
// w trybie pociągowym: można przyspieszyć do wskazanej prędkości (po zjechaniu z rozjazdów)
|
// w trybie pociągowym: można przyspieszyć do wskazanej prędkości (po zjechaniu z rozjazdów)
|
||||||
@@ -803,7 +803,7 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
double d; // droga
|
double d; // droga
|
||||||
double d_to_next_sem = 10000.0; //ustaiwamy na pewno dalej niż widzi AI
|
double d_to_next_sem = 10000.0; //ustaiwamy na pewno dalej niż widzi AI
|
||||||
bool isatpassengerstop { false }; // true if the consist is within acceptable range of w4 post
|
bool isatpassengerstop { false }; // true if the consist is within acceptable range of w4 post
|
||||||
TCommandType go = cm_Unknown;
|
TCommandType go = TCommandType::cm_Unknown;
|
||||||
eSignNext = NULL;
|
eSignNext = NULL;
|
||||||
// te flagi są ustawiane tutaj, w razie potrzeby
|
// te flagi są ustawiane tutaj, w razie potrzeby
|
||||||
iDrivigFlags &= ~(moveTrackEnd | moveSwitchFound | moveSemaphorFound | moveSpeedLimitFound);
|
iDrivigFlags &= ~(moveTrackEnd | moveSwitchFound | moveSemaphorFound | moveSpeedLimitFound);
|
||||||
@@ -1011,8 +1011,8 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
iDrivigFlags |= moveStopCloser; // do następnego W4 podjechać blisko (z dociąganiem)
|
iDrivigFlags |= moveStopCloser; // do następnego W4 podjechać blisko (z dociąganiem)
|
||||||
sSpeedTable[i].iFlags = 0; // nie liczy się już zupełnie (nie wyśle SetVelocity)
|
sSpeedTable[i].iFlags = 0; // nie liczy się już zupełnie (nie wyśle SetVelocity)
|
||||||
sSpeedTable[i].fVelNext = -1; // można jechać za W4
|
sSpeedTable[i].fVelNext = -1; // można jechać za W4
|
||||||
if (go == cm_Unknown) // jeśli nie było komendy wcześniej
|
if (go == TCommandType::cm_Unknown) // jeśli nie było komendy wcześniej
|
||||||
go = cm_Ready; // gotów do odjazdu z W4 (semafor może
|
go = TCommandType::cm_Ready; // gotów do odjazdu z W4 (semafor może
|
||||||
// zatrzymać)
|
// zatrzymać)
|
||||||
if( false == tsGuardSignal.empty() ) {
|
if( false == tsGuardSignal.empty() ) {
|
||||||
// jeśli mamy głos kierownika, to odegrać
|
// jeśli mamy głos kierownika, to odegrać
|
||||||
@@ -1232,12 +1232,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
sSpeedTable[ i ].iFlags = 0;
|
sSpeedTable[ i ].iFlags = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( go == cm_Unknown ) {
|
else if( go == TCommandType::cm_Unknown ) {
|
||||||
// jeśli jeszcze nie ma komendy
|
// jeśli jeszcze nie ma komendy
|
||||||
// komenda jest tylko gdy ma jechać, bo stoi na podstawietabelki
|
// komenda jest tylko gdy ma jechać, bo stoi na podstawietabelki
|
||||||
if( v != 0.0 ) {
|
if( v != 0.0 ) {
|
||||||
// jeśli nie było komendy wcześniej - pierwsza się liczy - ustawianie VelSignal
|
// jeśli nie było komendy wcześniej - pierwsza się liczy - ustawianie VelSignal
|
||||||
go = cm_ShuntVelocity; // w trybie pociągowym tylko jeśli włącza
|
go = TCommandType::cm_ShuntVelocity; // w trybie pociągowym tylko jeśli włącza
|
||||||
// tryb manewrowy (v!=0.0)
|
// tryb manewrowy (v!=0.0)
|
||||||
// Ra 2014-06: (VelSignal) nie może być tu ustawiane, bo Tm może być
|
// Ra 2014-06: (VelSignal) nie może być tu ustawiane, bo Tm może być
|
||||||
// daleko
|
// daleko
|
||||||
@@ -1258,12 +1258,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
}
|
}
|
||||||
else if( !( sSpeedTable[ i ].iFlags & spSectionVel ) ) {
|
else if( !( sSpeedTable[ i ].iFlags & spSectionVel ) ) {
|
||||||
//jeśli jakiś event pasywny ale nie ograniczenie
|
//jeśli jakiś event pasywny ale nie ograniczenie
|
||||||
if( go == cm_Unknown ) {
|
if( go == TCommandType::cm_Unknown ) {
|
||||||
// jeśli nie było komendy wcześniej - pierwsza się liczy - ustawianie VelSignal
|
// jeśli nie było komendy wcześniej - pierwsza się liczy - ustawianie VelSignal
|
||||||
if( ( v < 0.0 )
|
if( ( v < 0.0 )
|
||||||
|| ( v >= 1.0 ) ) {
|
|| ( v >= 1.0 ) ) {
|
||||||
// bo wartość 0.1 służy do hamowania tylko
|
// bo wartość 0.1 służy do hamowania tylko
|
||||||
go = cm_SetVelocity; // może odjechać
|
go = TCommandType::cm_SetVelocity; // może odjechać
|
||||||
// Ra 2014-06: (VelSignal) nie może być tu ustawiane, bo semafor może być daleko
|
// Ra 2014-06: (VelSignal) nie może być tu ustawiane, bo semafor może być daleko
|
||||||
// VelSignal=v; //nie do końca tak, to jest druga prędkość; -1 nie wpisywać...
|
// VelSignal=v; //nie do końca tak, to jest druga prędkość; -1 nie wpisywać...
|
||||||
if( VelSignal == 0.0 ) {
|
if( VelSignal == 0.0 ) {
|
||||||
@@ -1295,12 +1295,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN
|
|||||||
eSignNext = sSpeedTable[ i ].evEvent; // dla informacji
|
eSignNext = sSpeedTable[ i ].evEvent; // dla informacji
|
||||||
if( true == TestFlag( iDrivigFlags, moveStopHere ) ) {
|
if( true == TestFlag( iDrivigFlags, moveStopHere ) ) {
|
||||||
// jeśli ma stać, dostaje komendę od razu
|
// jeśli ma stać, dostaje komendę od razu
|
||||||
go = cm_Command; // komenda z komórki, do wykonania po zatrzymaniu
|
go = TCommandType::cm_Command; // komenda z komórki, do wykonania po zatrzymaniu
|
||||||
}
|
}
|
||||||
else if( sSpeedTable[ i ].fDist <= fMaxProximityDist ) {
|
else if( sSpeedTable[ i ].fDist <= fMaxProximityDist ) {
|
||||||
// jeśli ma dociągnąć, to niech dociąga
|
// jeśli ma dociągnąć, to niech dociąga
|
||||||
// (moveStopCloser dotyczy dociągania do W4, nie semafora)
|
// (moveStopCloser dotyczy dociągania do W4, nie semafora)
|
||||||
go = cm_Command; // komenda z komórki, do wykonania po zatrzymaniu
|
go = TCommandType::cm_Command; // komenda z komórki, do wykonania po zatrzymaniu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1671,7 +1671,7 @@ void TController::Activation()
|
|||||||
TDynamicObject *old = pVehicle, *d = pVehicle; // w tym siedzi AI
|
TDynamicObject *old = pVehicle, *d = pVehicle; // w tym siedzi AI
|
||||||
TController *drugi; // jakby były dwa, to zamienić miejscami, a nie robić wycieku pamięci
|
TController *drugi; // jakby były dwa, to zamienić miejscami, a nie robić wycieku pamięci
|
||||||
// poprzez nadpisanie
|
// poprzez nadpisanie
|
||||||
int brake = mvOccupied->LocalBrakePos;
|
auto const localbrakelevel { mvOccupied->LocalBrakePosA };
|
||||||
while (mvControlling->MainCtrlPos) // samo zapętlenie DecSpeed() nie wystarcza :/
|
while (mvControlling->MainCtrlPos) // samo zapętlenie DecSpeed() nie wystarcza :/
|
||||||
DecSpeed(true); // wymuszenie zerowania nastawnika jazdy
|
DecSpeed(true); // wymuszenie zerowania nastawnika jazdy
|
||||||
while (mvOccupied->ActiveDir < 0)
|
while (mvOccupied->ActiveDir < 0)
|
||||||
@@ -1683,7 +1683,7 @@ void TController::Activation()
|
|||||||
{
|
{
|
||||||
mvControlling->MainSwitch(
|
mvControlling->MainSwitch(
|
||||||
false); // dezaktywacja czuwaka, jeśli przejście do innego członu
|
false); // dezaktywacja czuwaka, jeśli przejście do innego członu
|
||||||
mvOccupied->DecLocalBrakeLevel(10); // zwolnienie hamulca w opuszczanym pojeździe
|
mvOccupied->DecLocalBrakeLevel(LocalBrakePosNo); // zwolnienie hamulca w opuszczanym pojeździe
|
||||||
// mvOccupied->BrakeLevelSet((mvOccupied->BrakeHandle==FVel6)?4:-2); //odcięcie na
|
// mvOccupied->BrakeLevelSet((mvOccupied->BrakeHandle==FVel6)?4:-2); //odcięcie na
|
||||||
// zaworze maszynisty, FVel6 po drugiej stronie nie luzuje
|
// zaworze maszynisty, FVel6 po drugiej stronie nie luzuje
|
||||||
mvOccupied->BrakeLevelSet(
|
mvOccupied->BrakeLevelSet(
|
||||||
@@ -1721,7 +1721,7 @@ void TController::Activation()
|
|||||||
ControllingSet(); // utworzenie połączenia do sterowanego pojazdu (może się zmienić) -
|
ControllingSet(); // utworzenie połączenia do sterowanego pojazdu (może się zmienić) -
|
||||||
// silnikowy dla EZT
|
// silnikowy dla EZT
|
||||||
}
|
}
|
||||||
if( mvControlling->EngineType == DieselEngine ) {
|
if( mvControlling->EngineType == TEngineType::DieselEngine ) {
|
||||||
// dla 2Ls150 - przed ustawieniem kierunku - można zmienić tryb pracy
|
// dla 2Ls150 - przed ustawieniem kierunku - można zmienić tryb pracy
|
||||||
if( mvControlling->ShuntModeAllow ) {
|
if( mvControlling->ShuntModeAllow ) {
|
||||||
mvControlling->CurrentSwitch(
|
mvControlling->CurrentSwitch(
|
||||||
@@ -1736,8 +1736,8 @@ void TController::Activation()
|
|||||||
// mvOccupied->ActiveDir=0; //żeby sam ustawił kierunek
|
// mvOccupied->ActiveDir=0; //żeby sam ustawił kierunek
|
||||||
mvOccupied->CabActivisation(); // uruchomienie kabin w członach
|
mvOccupied->CabActivisation(); // uruchomienie kabin w członach
|
||||||
DirectionForward(true); // nawrotnik do przodu
|
DirectionForward(true); // nawrotnik do przodu
|
||||||
if (brake) // hamowanie tylko jeśli był wcześniej zahamowany (bo możliwe, że jedzie!)
|
if (localbrakelevel > 0.0) // hamowanie tylko jeśli był wcześniej zahamowany (bo możliwe, że jedzie!)
|
||||||
mvOccupied->IncLocalBrakeLevel(brake); // zahamuj jak wcześniej
|
mvOccupied->LocalBrakePosA = localbrakelevel; // zahamuj jak wcześniej
|
||||||
CheckVehicles(); // sprawdzenie składu, AI zapali światła
|
CheckVehicles(); // sprawdzenie składu, AI zapali światła
|
||||||
TableClear(); // resetowanie tabelki skanowania torów
|
TableClear(); // resetowanie tabelki skanowania torów
|
||||||
}
|
}
|
||||||
@@ -1984,7 +1984,7 @@ bool TController::CheckVehicles(TOrders user)
|
|||||||
p->DestinationSet(TrainParams->Relation2, TrainParams->TrainName); // relacja docelowa, jeśli nie było
|
p->DestinationSet(TrainParams->Relation2, TrainParams->TrainName); // relacja docelowa, jeśli nie było
|
||||||
if (AIControllFlag) // jeśli prowadzi komputer
|
if (AIControllFlag) // jeśli prowadzi komputer
|
||||||
p->RaLightsSet(0, 0); // gasimy światła
|
p->RaLightsSet(0, 0); // gasimy światła
|
||||||
if (p->MoverParameters->EnginePowerSource.SourceType == CurrentCollector)
|
if (p->MoverParameters->EnginePowerSource.SourceType == TPowerSource::CurrentCollector)
|
||||||
{ // jeśli pojazd posiada pantograf, to przydzielamy mu maskę, którą będzie informował o
|
{ // jeśli pojazd posiada pantograf, to przydzielamy mu maskę, którą będzie informował o
|
||||||
// jeździe bezprądowej
|
// jeździe bezprądowej
|
||||||
p->iOverheadMask = pantmask;
|
p->iOverheadMask = pantmask;
|
||||||
@@ -2274,7 +2274,7 @@ bool TController::PrepareEngine()
|
|||||||
ReactionTime = PrepareTime;
|
ReactionTime = PrepareTime;
|
||||||
iDrivigFlags |= moveActive; // może skanować sygnały i reagować na komendy
|
iDrivigFlags |= moveActive; // może skanować sygnały i reagować na komendy
|
||||||
|
|
||||||
if ( mvControlling->EnginePowerSource.SourceType == CurrentCollector ) {
|
if ( mvControlling->EnginePowerSource.SourceType == TPowerSource::CurrentCollector ) {
|
||||||
voltfront = true;
|
voltfront = true;
|
||||||
voltrear = true;
|
voltrear = true;
|
||||||
}
|
}
|
||||||
@@ -2288,15 +2288,15 @@ bool TController::PrepareEngine()
|
|||||||
if (AIControllFlag) {
|
if (AIControllFlag) {
|
||||||
// część wykonawcza dla sterowania przez komputer
|
// część wykonawcza dla sterowania przez komputer
|
||||||
mvOccupied->BatterySwitch( true );
|
mvOccupied->BatterySwitch( true );
|
||||||
if( ( mvControlling->EngineType == DieselElectric )
|
if( ( mvControlling->EngineType == TEngineType::DieselElectric )
|
||||||
|| ( mvControlling->EngineType == DieselEngine ) ) {
|
|| ( mvControlling->EngineType == TEngineType::DieselEngine ) ) {
|
||||||
mvControlling->OilPumpSwitch( true );
|
mvControlling->OilPumpSwitch( true );
|
||||||
workingtemperature = UpdateHeating();
|
workingtemperature = UpdateHeating();
|
||||||
if( true == workingtemperature ) {
|
if( true == workingtemperature ) {
|
||||||
mvControlling->FuelPumpSwitch( true );
|
mvControlling->FuelPumpSwitch( true );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mvControlling->EnginePowerSource.SourceType == CurrentCollector)
|
if (mvControlling->EnginePowerSource.SourceType == TPowerSource::CurrentCollector)
|
||||||
{ // jeśli silnikowy jest pantografującym
|
{ // jeśli silnikowy jest pantografującym
|
||||||
mvOccupied->PantFront( true );
|
mvOccupied->PantFront( true );
|
||||||
mvOccupied->PantRear( true );
|
mvOccupied->PantRear( true );
|
||||||
@@ -2427,7 +2427,7 @@ bool TController::ReleaseEngine()
|
|||||||
ReactionTime = PrepareTime;
|
ReactionTime = PrepareTime;
|
||||||
if (AIControllFlag)
|
if (AIControllFlag)
|
||||||
{ // jeśli steruje komputer
|
{ // jeśli steruje komputer
|
||||||
if (mvOccupied->DoorCloseCtrl == control::driver)
|
if (mvOccupied->DoorCloseCtrl == control_t::driver)
|
||||||
{ // zamykanie drzwi
|
{ // zamykanie drzwi
|
||||||
if (mvOccupied->DoorLeftOpened)
|
if (mvOccupied->DoorLeftOpened)
|
||||||
mvOccupied->DoorLeft(false);
|
mvOccupied->DoorLeft(false);
|
||||||
@@ -2439,7 +2439,7 @@ bool TController::ReleaseEngine()
|
|||||||
{
|
{
|
||||||
mvControlling->CompressorSwitch(false);
|
mvControlling->CompressorSwitch(false);
|
||||||
mvControlling->ConverterSwitch(false);
|
mvControlling->ConverterSwitch(false);
|
||||||
if (mvControlling->EnginePowerSource.SourceType == CurrentCollector)
|
if (mvControlling->EnginePowerSource.SourceType == TPowerSource::CurrentCollector)
|
||||||
{
|
{
|
||||||
mvControlling->PantFront(false);
|
mvControlling->PantFront(false);
|
||||||
mvControlling->PantRear(false);
|
mvControlling->PantRear(false);
|
||||||
@@ -2474,15 +2474,15 @@ bool TController::ReleaseEngine()
|
|||||||
{ // jeśli się zatrzymał
|
{ // jeśli się zatrzymał
|
||||||
iEngineActive = 0;
|
iEngineActive = 0;
|
||||||
eStopReason = stopSleep; // stoimy z powodu wyłączenia
|
eStopReason = stopSleep; // stoimy z powodu wyłączenia
|
||||||
eAction = actSleep; //śpi (wygaszony)
|
eAction = TAction::actSleep; //śpi (wygaszony)
|
||||||
if (AIControllFlag)
|
if (AIControllFlag)
|
||||||
{
|
{
|
||||||
if( ( mvControlling->EngineType == DieselElectric )
|
if( ( mvControlling->EngineType == TEngineType::DieselElectric )
|
||||||
|| ( mvControlling->EngineType == DieselEngine ) ) {
|
|| ( mvControlling->EngineType == TEngineType::DieselEngine ) ) {
|
||||||
// heating/cooling subsystem
|
// heating/cooling subsystem
|
||||||
mvControlling->WaterHeaterSwitch( false );
|
mvControlling->WaterHeaterSwitch( false );
|
||||||
// optionally turn off the water pump as well
|
// optionally turn off the water pump as well
|
||||||
if( mvControlling->WaterPump.start_type != start::battery ) {
|
if( mvControlling->WaterPump.start_type != start_t::battery ) {
|
||||||
mvControlling->WaterPumpSwitch( false );
|
mvControlling->WaterPumpSwitch( false );
|
||||||
}
|
}
|
||||||
// fuel and oil subsystems
|
// fuel and oil subsystems
|
||||||
@@ -2504,8 +2504,8 @@ bool TController::IncBrake()
|
|||||||
{ // zwiększenie hamowania
|
{ // zwiększenie hamowania
|
||||||
bool OK = false;
|
bool OK = false;
|
||||||
switch( mvOccupied->BrakeSystem ) {
|
switch( mvOccupied->BrakeSystem ) {
|
||||||
case Individual: {
|
case TBrakeSystem::Individual: {
|
||||||
if( mvOccupied->LocalBrake == ManualBrake ) {
|
if( mvOccupied->LocalBrake == TLocalBrake::ManualBrake ) {
|
||||||
OK = mvOccupied->IncManualBrakeLevel( 1 + static_cast<int>( std::floor( 0.5 + std::fabs( AccDesired ) ) ) );
|
OK = mvOccupied->IncManualBrakeLevel( 1 + static_cast<int>( std::floor( 0.5 + std::fabs( AccDesired ) ) ) );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -2513,7 +2513,7 @@ bool TController::IncBrake()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Pneumatic: {
|
case TBrakeSystem::Pneumatic: {
|
||||||
// NOTE: can't perform just test whether connected vehicle == nullptr, due to virtual couplers formed with nearby vehicles
|
// NOTE: can't perform just test whether connected vehicle == nullptr, due to virtual couplers formed with nearby vehicles
|
||||||
bool standalone { true };
|
bool standalone { true };
|
||||||
if( ( mvOccupied->TrainType == dt_ET41 )
|
if( ( mvOccupied->TrainType == dt_ET41 )
|
||||||
@@ -2577,7 +2577,7 @@ bool TController::IncBrake()
|
|||||||
}
|
}
|
||||||
pos_corr = pos_corr / fMass * 2.5;
|
pos_corr = pos_corr / fMass * 2.5;
|
||||||
|
|
||||||
if (mvOccupied->BrakeHandle == FV4a)
|
if (mvOccupied->BrakeHandle == TBrakeHandle::FV4a)
|
||||||
{
|
{
|
||||||
pos_corr += mvOccupied->Handle->GetCP()*0.2;
|
pos_corr += mvOccupied->Handle->GetCP()*0.2;
|
||||||
|
|
||||||
@@ -2621,9 +2621,9 @@ bool TController::IncBrake()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ElectroPneumatic: {
|
case TBrakeSystem::ElectroPneumatic: {
|
||||||
if( mvOccupied->EngineType == ElectricInductionMotor ) {
|
if( mvOccupied->EngineType == TEngineType::ElectricInductionMotor ) {
|
||||||
if (mvOccupied->BrakeHandle == MHZ_EN57) {
|
if (mvOccupied->BrakeHandle == TBrakeHandle::MHZ_EN57) {
|
||||||
if (mvOccupied->BrakeCtrlPos < mvOccupied->Handle->GetPos(bh_FB))
|
if (mvOccupied->BrakeCtrlPos < mvOccupied->Handle->GetPos(bh_FB))
|
||||||
OK = mvOccupied->BrakeLevelAdd(1.0);
|
OK = mvOccupied->BrakeLevelAdd(1.0);
|
||||||
}
|
}
|
||||||
@@ -2652,13 +2652,13 @@ bool TController::DecBrake()
|
|||||||
double deltaAcc = 0;
|
double deltaAcc = 0;
|
||||||
switch (mvOccupied->BrakeSystem)
|
switch (mvOccupied->BrakeSystem)
|
||||||
{
|
{
|
||||||
case Individual:
|
case TBrakeSystem::Individual:
|
||||||
if (mvOccupied->LocalBrake == ManualBrake)
|
if (mvOccupied->LocalBrake == TLocalBrake::ManualBrake)
|
||||||
OK = mvOccupied->DecManualBrakeLevel(1 + floor(0.5 + fabs(AccDesired)));
|
OK = mvOccupied->DecManualBrakeLevel(1 + floor(0.5 + fabs(AccDesired)));
|
||||||
else
|
else
|
||||||
OK = mvOccupied->DecLocalBrakeLevel(1 + floor(0.5 + fabs(AccDesired)));
|
OK = mvOccupied->DecLocalBrakeLevel(1 + floor(0.5 + fabs(AccDesired)));
|
||||||
break;
|
break;
|
||||||
case Pneumatic:
|
case TBrakeSystem::Pneumatic:
|
||||||
deltaAcc = -AccDesired*BrakeAccFactor() - (fBrake_a0[0] + 4 * (mvOccupied->BrakeCtrlPosR-1.0)*fBrake_a1[0]);
|
deltaAcc = -AccDesired*BrakeAccFactor() - (fBrake_a0[0] + 4 * (mvOccupied->BrakeCtrlPosR-1.0)*fBrake_a1[0]);
|
||||||
if (deltaAcc < 0)
|
if (deltaAcc < 0)
|
||||||
{
|
{
|
||||||
@@ -2672,13 +2672,13 @@ bool TController::DecBrake()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!OK)
|
if (!OK)
|
||||||
OK = mvOccupied->DecLocalBrakeLevel(2);
|
OK = mvOccupied->DecLocalBrakeLevel(LocalBrakePosNo);
|
||||||
if (mvOccupied->PipePress < 3.0)
|
if (mvOccupied->PipePress < 3.0)
|
||||||
Need_BrakeRelease = true;
|
Need_BrakeRelease = true;
|
||||||
break;
|
break;
|
||||||
case ElectroPneumatic:
|
case TBrakeSystem::ElectroPneumatic:
|
||||||
if (mvOccupied->EngineType == ElectricInductionMotor) {
|
if (mvOccupied->EngineType == TEngineType::ElectricInductionMotor) {
|
||||||
if (mvOccupied->BrakeHandle == MHZ_EN57) {
|
if (mvOccupied->BrakeHandle == TBrakeHandle::MHZ_EN57) {
|
||||||
if (mvOccupied->BrakeCtrlPos > mvOccupied->Handle->GetPos(bh_RP))
|
if (mvOccupied->BrakeCtrlPos > mvOccupied->Handle->GetPos(bh_RP))
|
||||||
OK = mvOccupied->BrakeLevelAdd(-1.0);
|
OK = mvOccupied->BrakeLevelAdd(-1.0);
|
||||||
}
|
}
|
||||||
@@ -2696,7 +2696,7 @@ bool TController::DecBrake()
|
|||||||
else
|
else
|
||||||
OK = false;
|
OK = false;
|
||||||
if (!OK)
|
if (!OK)
|
||||||
OK = mvOccupied->DecLocalBrakeLevel(2);
|
OK = mvOccupied->DecLocalBrakeLevel(LocalBrakePosNo);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
@@ -2726,12 +2726,12 @@ bool TController::IncSpeed()
|
|||||||
return false; // jak poślizg, to nie przyspieszamy
|
return false; // jak poślizg, to nie przyspieszamy
|
||||||
switch (mvOccupied->EngineType)
|
switch (mvOccupied->EngineType)
|
||||||
{
|
{
|
||||||
case None: // McZapkie-041003: wagon sterowniczy
|
case TEngineType::None: // McZapkie-041003: wagon sterowniczy
|
||||||
if (mvControlling->MainCtrlPosNo > 0) // jeśli ma czym kręcić
|
if (mvControlling->MainCtrlPosNo > 0) // jeśli ma czym kręcić
|
||||||
iDrivigFlags |= moveIncSpeed; // ustawienie flagi jazdy
|
iDrivigFlags |= moveIncSpeed; // ustawienie flagi jazdy
|
||||||
return false;
|
return false;
|
||||||
case ElectricSeriesMotor:
|
case TEngineType::ElectricSeriesMotor:
|
||||||
if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) // jeśli pantografujący
|
if (mvControlling->EnginePowerSource.SourceType == TPowerSource::CurrentCollector) // jeśli pantografujący
|
||||||
{
|
{
|
||||||
if (fOverhead2 >= 0.0) // a jazda bezprądowa ustawiana eventami (albo opuszczenie)
|
if (fOverhead2 >= 0.0) // a jazda bezprądowa ustawiana eventami (albo opuszczenie)
|
||||||
return false; // to nici z ruszania
|
return false; // to nici z ruszania
|
||||||
@@ -2813,8 +2813,8 @@ bool TController::IncSpeed()
|
|||||||
}
|
}
|
||||||
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
||||||
break;
|
break;
|
||||||
case Dumb:
|
case TEngineType::Dumb:
|
||||||
case DieselElectric:
|
case TEngineType::DieselElectric:
|
||||||
if (!mvControlling->FuseFlag)
|
if (!mvControlling->FuseFlag)
|
||||||
if (Ready || (iDrivigFlags & movePress)) //{(BrakePress<=0.01*MaxBrakePress)}
|
if (Ready || (iDrivigFlags & movePress)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||||
{
|
{
|
||||||
@@ -2823,7 +2823,7 @@ bool TController::IncSpeed()
|
|||||||
OK = mvControlling->IncScndCtrl(1);
|
OK = mvControlling->IncScndCtrl(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ElectricInductionMotor:
|
case TEngineType::ElectricInductionMotor:
|
||||||
if (!mvControlling->FuseFlag)
|
if (!mvControlling->FuseFlag)
|
||||||
if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
|
if (Ready || (iDrivigFlags & movePress) || (mvOccupied->ShuntMode)) //{(BrakePress<=0.01*MaxBrakePress)}
|
||||||
{
|
{
|
||||||
@@ -2839,7 +2839,7 @@ bool TController::IncSpeed()
|
|||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WheelsDriven:
|
case TEngineType::WheelsDriven:
|
||||||
if (!mvControlling->CabNo)
|
if (!mvControlling->CabNo)
|
||||||
mvControlling->CabActivisation();
|
mvControlling->CabActivisation();
|
||||||
if (sin(mvControlling->eAngle) > 0)
|
if (sin(mvControlling->eAngle) > 0)
|
||||||
@@ -2847,7 +2847,7 @@ bool TController::IncSpeed()
|
|||||||
else
|
else
|
||||||
mvControlling->DecMainCtrl(3 + 3 * floor(0.5 + fabs(AccDesired)));
|
mvControlling->DecMainCtrl(3 + 3 * floor(0.5 + fabs(AccDesired)));
|
||||||
break;
|
break;
|
||||||
case DieselEngine:
|
case TEngineType::DieselEngine:
|
||||||
if (mvControlling->ShuntModeAllow)
|
if (mvControlling->ShuntModeAllow)
|
||||||
{ // dla 2Ls150 można zmienić tryb pracy, jeśli jest w liniowym i nie daje rady (wymaga zerowania kierunku)
|
{ // dla 2Ls150 można zmienić tryb pracy, jeśli jest w liniowym i nie daje rady (wymaga zerowania kierunku)
|
||||||
// mvControlling->ShuntMode=(OrderList[OrderPos]&Shunt)||(fMass>224000.0);
|
// mvControlling->ShuntMode=(OrderList[OrderPos]&Shunt)||(fMass>224000.0);
|
||||||
@@ -2876,29 +2876,29 @@ bool TController::DecSpeed(bool force)
|
|||||||
bool OK = false; // domyślnie false, aby wyszło z pętli while
|
bool OK = false; // domyślnie false, aby wyszło z pętli while
|
||||||
switch (mvOccupied->EngineType)
|
switch (mvOccupied->EngineType)
|
||||||
{
|
{
|
||||||
case None: // McZapkie-041003: wagon sterowniczy
|
case TEngineType::None: // McZapkie-041003: wagon sterowniczy
|
||||||
iDrivigFlags &= ~moveIncSpeed; // usunięcie flagi jazdy
|
iDrivigFlags &= ~moveIncSpeed; // usunięcie flagi jazdy
|
||||||
if (force) // przy aktywacji kabiny jest potrzeba natychmiastowego wyzerowania
|
if (force) // przy aktywacji kabiny jest potrzeba natychmiastowego wyzerowania
|
||||||
if (mvControlling->MainCtrlPosNo > 0) // McZapkie-041003: wagon sterowniczy, np. EZT
|
if (mvControlling->MainCtrlPosNo > 0) // McZapkie-041003: wagon sterowniczy, np. EZT
|
||||||
mvControlling->DecMainCtrl(1 + (mvControlling->MainCtrlPos > 2 ? 1 : 0));
|
mvControlling->DecMainCtrl(1 + (mvControlling->MainCtrlPos > 2 ? 1 : 0));
|
||||||
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
||||||
return false;
|
return false;
|
||||||
case ElectricSeriesMotor:
|
case TEngineType::ElectricSeriesMotor:
|
||||||
OK = mvControlling->DecScndCtrl(2); // najpierw bocznik na zero
|
OK = mvControlling->DecScndCtrl(2); // najpierw bocznik na zero
|
||||||
if (!OK)
|
if (!OK)
|
||||||
OK = mvControlling->DecMainCtrl(1 + (mvControlling->MainCtrlPos > 2 ? 1 : 0));
|
OK = mvControlling->DecMainCtrl(1 + (mvControlling->MainCtrlPos > 2 ? 1 : 0));
|
||||||
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
mvControlling->AutoRelayCheck(); // sprawdzenie logiki sterowania
|
||||||
break;
|
break;
|
||||||
case Dumb:
|
case TEngineType::Dumb:
|
||||||
case DieselElectric:
|
case TEngineType::DieselElectric:
|
||||||
OK = mvControlling->DecScndCtrl(2);
|
OK = mvControlling->DecScndCtrl(2);
|
||||||
if (!OK)
|
if (!OK)
|
||||||
OK = mvControlling->DecMainCtrl(2 + (mvControlling->MainCtrlPos / 2));
|
OK = mvControlling->DecMainCtrl(2 + (mvControlling->MainCtrlPos / 2));
|
||||||
break;
|
break;
|
||||||
case ElectricInductionMotor:
|
case TEngineType::ElectricInductionMotor:
|
||||||
OK = mvControlling->DecMainCtrl(1);
|
OK = mvControlling->DecMainCtrl(1);
|
||||||
break;
|
break;
|
||||||
case WheelsDriven:
|
case TEngineType::WheelsDriven:
|
||||||
if (!mvControlling->CabNo)
|
if (!mvControlling->CabNo)
|
||||||
mvControlling->CabActivisation();
|
mvControlling->CabActivisation();
|
||||||
if (sin(mvControlling->eAngle) < 0)
|
if (sin(mvControlling->eAngle) < 0)
|
||||||
@@ -2906,7 +2906,7 @@ bool TController::DecSpeed(bool force)
|
|||||||
else
|
else
|
||||||
mvControlling->DecMainCtrl(3 + 3 * floor(0.5 + fabs(AccDesired)));
|
mvControlling->DecMainCtrl(3 + 3 * floor(0.5 + fabs(AccDesired)));
|
||||||
break;
|
break;
|
||||||
case DieselEngine:
|
case TEngineType::DieselEngine:
|
||||||
if ((mvControlling->Vel > mvControlling->dizel_minVelfullengage))
|
if ((mvControlling->Vel > mvControlling->dizel_minVelfullengage))
|
||||||
{
|
{
|
||||||
if (mvControlling->RList[mvControlling->MainCtrlPos].Mn > 0)
|
if (mvControlling->RList[mvControlling->MainCtrlPos].Mn > 0)
|
||||||
@@ -2928,7 +2928,7 @@ void TController::SpeedSet()
|
|||||||
// ma dokręcać do bezoporowych i zdejmować pozycje w przypadku przekroczenia prądu
|
// ma dokręcać do bezoporowych i zdejmować pozycje w przypadku przekroczenia prądu
|
||||||
switch (mvOccupied->EngineType)
|
switch (mvOccupied->EngineType)
|
||||||
{
|
{
|
||||||
case None: // McZapkie-041003: wagon sterowniczy
|
case TEngineType::None: // McZapkie-041003: wagon sterowniczy
|
||||||
if (mvControlling->MainCtrlPosNo > 0)
|
if (mvControlling->MainCtrlPosNo > 0)
|
||||||
{ // jeśli ma czym kręcić
|
{ // jeśli ma czym kręcić
|
||||||
// TODO: sprawdzanie innego czlonu //if (!FuseFlagCheck())
|
// TODO: sprawdzanie innego czlonu //if (!FuseFlagCheck())
|
||||||
@@ -2993,7 +2993,7 @@ void TController::SpeedSet()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ElectricSeriesMotor:
|
case TEngineType::ElectricSeriesMotor:
|
||||||
if( ( false == mvControlling->StLinFlag )
|
if( ( false == mvControlling->StLinFlag )
|
||||||
&& ( false == mvControlling->DelayCtrlFlag ) ) {
|
&& ( false == mvControlling->DelayCtrlFlag ) ) {
|
||||||
// styczniki liniowe rozłączone yBARC
|
// styczniki liniowe rozłączone yBARC
|
||||||
@@ -3063,15 +3063,15 @@ void TController::SpeedSet()
|
|||||||
// bezoporowej
|
// bezoporowej
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Dumb:
|
case TEngineType::Dumb:
|
||||||
case DieselElectric:
|
case TEngineType::DieselElectric:
|
||||||
case ElectricInductionMotor:
|
case TEngineType::ElectricInductionMotor:
|
||||||
break;
|
break;
|
||||||
// WheelsDriven :
|
// WheelsDriven :
|
||||||
// begin
|
// begin
|
||||||
// OK:=False;
|
// OK:=False;
|
||||||
// end;
|
// end;
|
||||||
case DieselEngine:
|
case TEngineType::DieselEngine:
|
||||||
// Ra 2014-06: "automatyczna" skrzynia biegów...
|
// Ra 2014-06: "automatyczna" skrzynia biegów...
|
||||||
if (!mvControlling->MotorParam[mvControlling->ScndCtrlPos].AutoSwitch) // gdy biegi ręczne
|
if (!mvControlling->MotorParam[mvControlling->ScndCtrlPos].AutoSwitch) // gdy biegi ręczne
|
||||||
if ((mvControlling->ShuntMode ? mvControlling->AnPos : 1.0) * mvControlling->Vel >
|
if ((mvControlling->ShuntMode ? mvControlling->AnPos : 1.0) * mvControlling->Vel >
|
||||||
@@ -3128,7 +3128,7 @@ void TController::Doors( bool const Open, int const Side ) {
|
|||||||
// wagony muszą mieć baterię załączoną do otwarcia drzwi...
|
// wagony muszą mieć baterię załączoną do otwarcia drzwi...
|
||||||
vehicle->MoverParameters->BatterySwitch( true );
|
vehicle->MoverParameters->BatterySwitch( true );
|
||||||
// otwieranie drzwi w pojazdach - flaga zezwolenia była by lepsza
|
// otwieranie drzwi w pojazdach - flaga zezwolenia była by lepsza
|
||||||
if( vehicle->MoverParameters->DoorOpenCtrl != control::passenger ) {
|
if( vehicle->MoverParameters->DoorOpenCtrl != control_t::passenger ) {
|
||||||
// if the door are controlled by the driver, we let the user operate them...
|
// if the door are controlled by the driver, we let the user operate them...
|
||||||
if( true == AIControllFlag ) {
|
if( true == AIControllFlag ) {
|
||||||
// ...unless this user is an ai
|
// ...unless this user is an ai
|
||||||
@@ -3137,9 +3137,9 @@ void TController::Doors( bool const Open, int const Side ) {
|
|||||||
auto const lewe = ( vehicle->DirectionGet() > 0 ) ? 1 : 2;
|
auto const lewe = ( vehicle->DirectionGet() > 0 ) ? 1 : 2;
|
||||||
auto const prawe = 3 - lewe;
|
auto const prawe = 3 - lewe;
|
||||||
if( Side & lewe )
|
if( Side & lewe )
|
||||||
vehicle->MoverParameters->DoorLeft( true, range::local );
|
vehicle->MoverParameters->DoorLeft( true, range_t::local );
|
||||||
if( Side & prawe )
|
if( Side & prawe )
|
||||||
vehicle->MoverParameters->DoorRight( true, range::local );
|
vehicle->MoverParameters->DoorRight( true, range_t::local );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// pojazd podłączony z tyłu (patrząc od czoła)
|
// pojazd podłączony z tyłu (patrząc od czoła)
|
||||||
@@ -3169,9 +3169,9 @@ void TController::Doors( bool const Open, int const Side ) {
|
|||||||
auto *vehicle = pVehicles[ 0 ]; // pojazd na czole składu
|
auto *vehicle = pVehicles[ 0 ]; // pojazd na czole składu
|
||||||
while( vehicle != nullptr ) {
|
while( vehicle != nullptr ) {
|
||||||
// zamykanie drzwi w pojazdach - flaga zezwolenia była by lepsza
|
// zamykanie drzwi w pojazdach - flaga zezwolenia była by lepsza
|
||||||
if( vehicle->MoverParameters->DoorCloseCtrl != control::autonomous ) {
|
if( vehicle->MoverParameters->DoorCloseCtrl != control_t::autonomous ) {
|
||||||
vehicle->MoverParameters->DoorLeft( false, range::local ); // w lokomotywie można by nie zamykać...
|
vehicle->MoverParameters->DoorLeft( false, range_t::local ); // w lokomotywie można by nie zamykać...
|
||||||
vehicle->MoverParameters->DoorRight( false, range::local );
|
vehicle->MoverParameters->DoorRight( false, range_t::local );
|
||||||
}
|
}
|
||||||
vehicle = vehicle->Next(); // pojazd podłączony z tyłu (patrząc od czoła)
|
vehicle = vehicle->Next(); // pojazd podłączony z tyłu (patrząc od czoła)
|
||||||
}
|
}
|
||||||
@@ -3625,8 +3625,8 @@ void TController::PhysicsLog()
|
|||||||
<< mvControlling->Im << " "
|
<< mvControlling->Im << " "
|
||||||
<< int(mvControlling->MainCtrlPos) << " "
|
<< int(mvControlling->MainCtrlPos) << " "
|
||||||
<< int(mvControlling->ScndCtrlPos) << " "
|
<< int(mvControlling->ScndCtrlPos) << " "
|
||||||
<< int(mvOccupied->BrakeCtrlPos) << " "
|
<< mvOccupied->fBrakeCtrlPos << " "
|
||||||
<< int(mvOccupied->LocalBrakePos) << " "
|
<< mvOccupied->LocalBrakePosA << " "
|
||||||
<< int(mvControlling->ActiveDir) << " "
|
<< int(mvControlling->ActiveDir) << " "
|
||||||
<< ( mvOccupied->CommandIn.Command.empty() ? "none" : mvOccupied->CommandIn.Command.c_str() ) << " "
|
<< ( mvOccupied->CommandIn.Command.empty() ? "none" : mvOccupied->CommandIn.Command.c_str() ) << " "
|
||||||
<< mvOccupied->CommandIn.Value1 << " "
|
<< mvOccupied->CommandIn.Value1 << " "
|
||||||
@@ -3752,14 +3752,14 @@ TController::UpdateSituation(double dt) {
|
|||||||
|
|
||||||
auto const *vehicle { p->MoverParameters };
|
auto const *vehicle { p->MoverParameters };
|
||||||
|
|
||||||
if( ( vehicle->EngineType == DieselEngine )
|
if( ( vehicle->EngineType == TEngineType::DieselEngine )
|
||||||
|| ( vehicle->EngineType == DieselElectric ) ) {
|
|| ( vehicle->EngineType == TEngineType::DieselElectric ) ) {
|
||||||
|
|
||||||
Ready = (
|
Ready = (
|
||||||
( vehicle->Vel > 0.5 ) // already moving
|
( vehicle->Vel > 0.5 ) // already moving
|
||||||
|| ( false == vehicle->Mains ) // deadweight vehicle
|
|| ( false == vehicle->Mains ) // deadweight vehicle
|
||||||
|| ( vehicle->enrot > 0.8 * (
|
|| ( vehicle->enrot > 0.8 * (
|
||||||
vehicle->EngineType == DieselEngine ?
|
vehicle->EngineType == TEngineType::DieselEngine ?
|
||||||
vehicle->dizel_nmin :
|
vehicle->dizel_nmin :
|
||||||
vehicle->DElist[ 0 ].RPM / 60.0 ) ) );
|
vehicle->DElist[ 0 ].RPM / 60.0 ) ) );
|
||||||
}
|
}
|
||||||
@@ -3770,7 +3770,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
// for human-controlled vehicles with no door control and dynamic brake auto-activating with door open
|
// for human-controlled vehicles with no door control and dynamic brake auto-activating with door open
|
||||||
if( ( false == AIControllFlag )
|
if( ( false == AIControllFlag )
|
||||||
&& ( iDrivigFlags & moveDoorOpened )
|
&& ( iDrivigFlags & moveDoorOpened )
|
||||||
&& ( mvOccupied->DoorCloseCtrl != control::driver )
|
&& ( mvOccupied->DoorCloseCtrl != control_t::driver )
|
||||||
&& ( mvControlling->MainCtrlPos > 0 ) ) {
|
&& ( mvControlling->MainCtrlPos > 0 ) ) {
|
||||||
Doors( false );
|
Doors( false );
|
||||||
}
|
}
|
||||||
@@ -3790,7 +3790,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) {
|
if (mvControlling->EnginePowerSource.SourceType == TPowerSource::CurrentCollector) {
|
||||||
|
|
||||||
if( mvOccupied->ScndPipePress > 4.3 ) {
|
if( mvOccupied->ScndPipePress > 4.3 ) {
|
||||||
// gdy główna sprężarka bezpiecznie nabije ciśnienie to można przestawić kurek na zasilanie pantografów z głównej pneumatyki
|
// gdy główna sprężarka bezpiecznie nabije ciśnienie to można przestawić kurek na zasilanie pantografów z głównej pneumatyki
|
||||||
@@ -3827,7 +3827,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mvControlling->EnginePowerSource.SourceType == CurrentCollector) {
|
if (mvControlling->EnginePowerSource.SourceType == TPowerSource::CurrentCollector) {
|
||||||
|
|
||||||
if( mvOccupied->Vel > 0.05 ) {
|
if( mvOccupied->Vel > 0.05 ) {
|
||||||
// is moving
|
// is moving
|
||||||
@@ -3873,7 +3873,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
// if the power station is heavily burdened try to reduce the load
|
// if the power station is heavily burdened try to reduce the load
|
||||||
switch( mvControlling->EngineType ) {
|
switch( mvControlling->EngineType ) {
|
||||||
|
|
||||||
case ElectricSeriesMotor: {
|
case TEngineType::ElectricSeriesMotor: {
|
||||||
if( mvControlling->RList[ mvControlling->MainCtrlPos ].Bn > 1 ) {
|
if( mvControlling->RList[ mvControlling->MainCtrlPos ].Bn > 1 ) {
|
||||||
// limit yourself to series mode
|
// limit yourself to series mode
|
||||||
if( mvControlling->ScndCtrlPos ) {
|
if( mvControlling->ScndCtrlPos ) {
|
||||||
@@ -4168,7 +4168,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
// 3. faza odczepiania.
|
// 3. faza odczepiania.
|
||||||
SetVelocity(2, 0); // jazda w ustawionym kierunku z prędkością 2
|
SetVelocity(2, 0); // jazda w ustawionym kierunku z prędkością 2
|
||||||
if ((mvControlling->MainCtrlPos > 0) ||
|
if ((mvControlling->MainCtrlPos > 0) ||
|
||||||
(mvOccupied->BrakeSystem == ElectroPneumatic)) // jeśli jazda
|
(mvOccupied->BrakeSystem == TBrakeSystem::ElectroPneumatic)) // jeśli jazda
|
||||||
{
|
{
|
||||||
WriteLog(mvOccupied->Name + " odczepianie w kierunku " + std::to_string(mvOccupied->DirAbsolute));
|
WriteLog(mvOccupied->Name + " odczepianie w kierunku " + std::to_string(mvOccupied->DirAbsolute));
|
||||||
TDynamicObject *p =
|
TDynamicObject *p =
|
||||||
@@ -4223,7 +4223,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
// powino zostać wyłączone)
|
// powino zostać wyłączone)
|
||||||
// WriteLog("Zahamowanie składu");
|
// WriteLog("Zahamowanie składu");
|
||||||
mvOccupied->BrakeLevelSet(
|
mvOccupied->BrakeLevelSet(
|
||||||
mvOccupied->BrakeSystem == ElectroPneumatic ?
|
mvOccupied->BrakeSystem == TBrakeSystem::ElectroPneumatic ?
|
||||||
1 :
|
1 :
|
||||||
3 );
|
3 );
|
||||||
double p = mvOccupied->BrakePressureActual.PipePressureVal;
|
double p = mvOccupied->BrakePressureActual.PipePressureVal;
|
||||||
@@ -4232,18 +4232,18 @@ TController::UpdateSituation(double dt) {
|
|||||||
// TODO: zabezpieczenie przed dziwnymi CHK do czasu wyjaśnienia sensu 0 oraz -1 w tym miejscu
|
// TODO: zabezpieczenie przed dziwnymi CHK do czasu wyjaśnienia sensu 0 oraz -1 w tym miejscu
|
||||||
p = 3.9;
|
p = 3.9;
|
||||||
}
|
}
|
||||||
if (mvOccupied->BrakeSystem == ElectroPneumatic ?
|
if (mvOccupied->BrakeSystem == TBrakeSystem::ElectroPneumatic ?
|
||||||
mvOccupied->BrakePress > 2 :
|
mvOccupied->BrakePress > 2 :
|
||||||
mvOccupied->PipePress < p + 0.1)
|
mvOccupied->PipePress < p + 0.1)
|
||||||
{ // jeśli w miarę został zahamowany (ciśnienie mniejsze niż podane na
|
{ // jeśli w miarę został zahamowany (ciśnienie mniejsze niż podane na
|
||||||
// pozycji 3, zwyle 0.37)
|
// pozycji 3, zwyle 0.37)
|
||||||
if (mvOccupied->BrakeSystem == ElectroPneumatic)
|
if (mvOccupied->BrakeSystem == TBrakeSystem::ElectroPneumatic)
|
||||||
mvOccupied->BrakeLevelSet(0); // wyłączenie EP, gdy wystarczy (może
|
mvOccupied->BrakeLevelSet(0); // wyłączenie EP, gdy wystarczy (może
|
||||||
// nie być potrzebne, bo na początku
|
// nie być potrzebne, bo na początku
|
||||||
// jest)
|
// jest)
|
||||||
WriteLog("Luzowanie lokomotywy i zmiana kierunku");
|
WriteLog("Luzowanie lokomotywy i zmiana kierunku");
|
||||||
mvOccupied->BrakeReleaser(1); // wyluzuj lokomotywę; a ST45?
|
mvOccupied->BrakeReleaser(1); // wyluzuj lokomotywę; a ST45?
|
||||||
mvOccupied->DecLocalBrakeLevel(10); // zwolnienie hamulca
|
mvOccupied->DecLocalBrakeLevel(LocalBrakePosNo); // zwolnienie hamulca
|
||||||
iDrivigFlags |= movePress; // następnie będzie dociskanie
|
iDrivigFlags |= movePress; // następnie będzie dociskanie
|
||||||
DirectionForward(mvOccupied->ActiveDir < 0); // zmiana kierunku jazdy na przeciwny (dociskanie)
|
DirectionForward(mvOccupied->ActiveDir < 0); // zmiana kierunku jazdy na przeciwny (dociskanie)
|
||||||
CheckVehicles(); // od razu zmienić światła (zgasić) - bez tego się nie odczepi
|
CheckVehicles(); // od razu zmienić światła (zgasić) - bez tego się nie odczepi
|
||||||
@@ -4512,7 +4512,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
|
|
||||||
switch (comm)
|
switch (comm)
|
||||||
{ // ustawienie VelSignal - trochę proteza = do przemyślenia
|
{ // ustawienie VelSignal - trochę proteza = do przemyślenia
|
||||||
case cm_Ready: // W4 zezwolił na jazdę
|
case TCommandType::cm_Ready: // W4 zezwolił na jazdę
|
||||||
// ewentualne doskanowanie trasy za W4, który zezwolił na jazdę
|
// ewentualne doskanowanie trasy za W4, który zezwolił na jazdę
|
||||||
TableCheck( routescanrange);
|
TableCheck( routescanrange);
|
||||||
TableUpdate(VelDesired, ActualProximityDist, VelNext, AccDesired); // aktualizacja po skanowaniu
|
TableUpdate(VelDesired, ActualProximityDist, VelNext, AccDesired); // aktualizacja po skanowaniu
|
||||||
@@ -4520,21 +4520,21 @@ TController::UpdateSituation(double dt) {
|
|||||||
break; // ale jak coś z przodu zamyka, to ma stać
|
break; // ale jak coś z przodu zamyka, to ma stać
|
||||||
if (iDrivigFlags & moveStopCloser)
|
if (iDrivigFlags & moveStopCloser)
|
||||||
VelSignal = -1.0; // ma czekać na sygnał z sygnalizatora!
|
VelSignal = -1.0; // ma czekać na sygnał z sygnalizatora!
|
||||||
case cm_SetVelocity: // od wersji 357 semafor nie budzi wyłączonej lokomotywy
|
case TCommandType::cm_SetVelocity: // od wersji 357 semafor nie budzi wyłączonej lokomotywy
|
||||||
if (!(OrderList[OrderPos] &
|
if (!(OrderList[OrderPos] &
|
||||||
~(Obey_train | Shunt))) // jedzie w dowolnym trybie albo Wait_for_orders
|
~(Obey_train | Shunt))) // jedzie w dowolnym trybie albo Wait_for_orders
|
||||||
if (fabs(VelSignal) >=
|
if (fabs(VelSignal) >=
|
||||||
1.0) // 0.1 nie wysyła się do samochodow, bo potem nie ruszą
|
1.0) // 0.1 nie wysyła się do samochodow, bo potem nie ruszą
|
||||||
PutCommand("SetVelocity", VelSignal, VelNext, nullptr); // komenda robi dodatkowe operacje
|
PutCommand("SetVelocity", VelSignal, VelNext, nullptr); // komenda robi dodatkowe operacje
|
||||||
break;
|
break;
|
||||||
case cm_ShuntVelocity: // od wersji 357 Tm nie budzi wyłączonej lokomotywy
|
case TCommandType::cm_ShuntVelocity: // od wersji 357 Tm nie budzi wyłączonej lokomotywy
|
||||||
if (!(OrderList[OrderPos] &
|
if (!(OrderList[OrderPos] &
|
||||||
~(Obey_train | Shunt))) // jedzie w dowolnym trybie albo Wait_for_orders
|
~(Obey_train | Shunt))) // jedzie w dowolnym trybie albo Wait_for_orders
|
||||||
PutCommand("ShuntVelocity", VelSignal, VelNext, nullptr);
|
PutCommand("ShuntVelocity", VelSignal, VelNext, nullptr);
|
||||||
else if (iCoupler) // jeśli jedzie w celu połączenia
|
else if (iCoupler) // jeśli jedzie w celu połączenia
|
||||||
SetVelocity(VelSignal, VelNext);
|
SetVelocity(VelSignal, VelNext);
|
||||||
break;
|
break;
|
||||||
case cm_Command: // komenda z komórki
|
case TCommandType::cm_Command: // komenda z komórki
|
||||||
if( !( OrderList[ OrderPos ] & ~( Obey_train | Shunt ) ) ) {
|
if( !( OrderList[ OrderPos ] & ~( Obey_train | Shunt ) ) ) {
|
||||||
// jedzie w dowolnym trybie albo Wait_for_orders
|
// jedzie w dowolnym trybie albo Wait_for_orders
|
||||||
if( mvOccupied->Vel < 0.1 ) {
|
if( mvOccupied->Vel < 0.1 ) {
|
||||||
@@ -4557,12 +4557,12 @@ TController::UpdateSituation(double dt) {
|
|||||||
if( ( OrderList[ OrderPos ] & Connect ) ?
|
if( ( OrderList[ OrderPos ] & Connect ) ?
|
||||||
( pVehicles[ 0 ]->fTrackBlock > 2000 || pVehicles[ 0 ]->fTrackBlock > FirstSemaphorDist ) :
|
( pVehicles[ 0 ]->fTrackBlock > 2000 || pVehicles[ 0 ]->fTrackBlock > FirstSemaphorDist ) :
|
||||||
true ) {
|
true ) {
|
||||||
if( ( comm = BackwardScan() ) != cm_Unknown ) {
|
if( ( comm = BackwardScan() ) != TCommandType::cm_Unknown ) {
|
||||||
// jeśli w drugą można jechać
|
// jeśli w drugą można jechać
|
||||||
// należy sprawdzać odległość od znalezionego sygnalizatora,
|
// należy sprawdzać odległość od znalezionego sygnalizatora,
|
||||||
// aby w przypadku prędkości 0.1 wyciągnąć najpierw skład za sygnalizator
|
// aby w przypadku prędkości 0.1 wyciągnąć najpierw skład za sygnalizator
|
||||||
// i dopiero wtedy zmienić kierunek jazdy, oczekując podania prędkości >0.5
|
// i dopiero wtedy zmienić kierunek jazdy, oczekując podania prędkości >0.5
|
||||||
if( comm == cm_Command ) {
|
if( comm == TCommandType::cm_Command ) {
|
||||||
// jeśli komenda Shunt to ją odbierz bez przemieszczania się (np. odczep wagony po dopchnięciu do końca toru)
|
// jeśli komenda Shunt to ją odbierz bez przemieszczania się (np. odczep wagony po dopchnięciu do końca toru)
|
||||||
iDrivigFlags |= moveStopHere;
|
iDrivigFlags |= moveStopHere;
|
||||||
}
|
}
|
||||||
@@ -5044,9 +5044,9 @@ TController::UpdateSituation(double dt) {
|
|||||||
PrepareEngine(); // próba ponownego załączenia
|
PrepareEngine(); // próba ponownego załączenia
|
||||||
}
|
}
|
||||||
// włączanie bezpiecznika
|
// włączanie bezpiecznika
|
||||||
if ((mvControlling->EngineType == ElectricSeriesMotor) ||
|
if ((mvControlling->EngineType == TEngineType::ElectricSeriesMotor) ||
|
||||||
(mvControlling->TrainType & dt_EZT) ||
|
(mvControlling->TrainType & dt_EZT) ||
|
||||||
(mvControlling->EngineType == DieselElectric))
|
(mvControlling->EngineType == TEngineType::DieselElectric))
|
||||||
if (mvControlling->FuseFlag || Need_TryAgain)
|
if (mvControlling->FuseFlag || Need_TryAgain)
|
||||||
{
|
{
|
||||||
Need_TryAgain = false; // true, jeśli druga pozycja w elektryku nie załapała
|
Need_TryAgain = false; // true, jeśli druga pozycja w elektryku nie załapała
|
||||||
@@ -5079,8 +5079,8 @@ TController::UpdateSituation(double dt) {
|
|||||||
ReactionTime = 0.25;
|
ReactionTime = 0.25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mvOccupied->BrakeSystem == Pneumatic) // napełnianie uderzeniowe
|
if (mvOccupied->BrakeSystem == TBrakeSystem::Pneumatic) // napełnianie uderzeniowe
|
||||||
if (mvOccupied->BrakeHandle == FV4a)
|
if (mvOccupied->BrakeHandle == TBrakeHandle::FV4a)
|
||||||
{
|
{
|
||||||
if( mvOccupied->BrakeCtrlPos == -2 ) {
|
if( mvOccupied->BrakeCtrlPos == -2 ) {
|
||||||
mvOccupied->BrakeLevelSet( 0 );
|
mvOccupied->BrakeLevelSet( 0 );
|
||||||
@@ -5282,7 +5282,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
if( ( VelDesired == 0.0 )
|
if( ( VelDesired == 0.0 )
|
||||||
&& ( vel > VelDesired )
|
&& ( vel > VelDesired )
|
||||||
&& ( ActualProximityDist <= fMinProximityDist )
|
&& ( ActualProximityDist <= fMinProximityDist )
|
||||||
&& ( mvOccupied->LocalBrakePos == 0 ) ) {
|
&& ( mvOccupied->LocalBrakePosA < 0.01 ) ) {
|
||||||
IncBrake();
|
IncBrake();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5335,8 +5335,8 @@ TController::UpdateHeating() {
|
|||||||
|
|
||||||
switch( mvControlling->EngineType ) {
|
switch( mvControlling->EngineType ) {
|
||||||
|
|
||||||
case DieselElectric:
|
case TEngineType::DieselElectric:
|
||||||
case DieselEngine: {
|
case TEngineType::DieselEngine: {
|
||||||
|
|
||||||
auto const &heat { mvControlling->dizel_heat };
|
auto const &heat { mvControlling->dizel_heat };
|
||||||
|
|
||||||
@@ -5368,7 +5368,7 @@ TController::UpdateHeating() {
|
|||||||
mvControlling->WaterHeaterSwitch( false );
|
mvControlling->WaterHeaterSwitch( false );
|
||||||
mvControlling->WaterHeaterBreakerSwitch( false );
|
mvControlling->WaterHeaterBreakerSwitch( false );
|
||||||
// optionally turn off the water pump as well
|
// optionally turn off the water pump as well
|
||||||
if( mvControlling->WaterPump.start_type != start::battery ) {
|
if( mvControlling->WaterPump.start_type != start_t::battery ) {
|
||||||
mvControlling->WaterPumpSwitch( false );
|
mvControlling->WaterPumpSwitch( false );
|
||||||
mvControlling->WaterPumpBreakerSwitch( false );
|
mvControlling->WaterPumpBreakerSwitch( false );
|
||||||
}
|
}
|
||||||
@@ -5738,13 +5738,13 @@ TCommandType TController::BackwardScan()
|
|||||||
// zwraca true, jeśli należy odwrócić kierunek jazdy pojazdu
|
// zwraca true, jeśli należy odwrócić kierunek jazdy pojazdu
|
||||||
if( ( OrderList[ OrderPos ] & ~( Shunt | Connect ) ) ) {
|
if( ( OrderList[ OrderPos ] & ~( Shunt | Connect ) ) ) {
|
||||||
// skanowanie sygnałów tylko gdy jedzie w trybie manewrowym albo czeka na rozkazy
|
// skanowanie sygnałów tylko gdy jedzie w trybie manewrowym albo czeka na rozkazy
|
||||||
return cm_Unknown;
|
return TCommandType::cm_Unknown;
|
||||||
}
|
}
|
||||||
// kierunek jazdy względem sprzęgów pojazdu na czele
|
// kierunek jazdy względem sprzęgów pojazdu na czele
|
||||||
int const startdir = -pVehicles[0]->DirectionGet();
|
int const startdir = -pVehicles[0]->DirectionGet();
|
||||||
if( startdir == 0 ) {
|
if( startdir == 0 ) {
|
||||||
// jeśli kabina i kierunek nie jest określony nie robimy nic
|
// jeśli kabina i kierunek nie jest określony nie robimy nic
|
||||||
return cm_Unknown;
|
return TCommandType::cm_Unknown;
|
||||||
}
|
}
|
||||||
// szukamy od pierwszej osi w wybranym kierunku
|
// szukamy od pierwszej osi w wybranym kierunku
|
||||||
double scandir = startdir * pVehicles[0]->RaDirectionGet();
|
double scandir = startdir * pVehicles[0]->RaDirectionGet();
|
||||||
@@ -5759,7 +5759,7 @@ TCommandType TController::BackwardScan()
|
|||||||
auto const dir = startdir * pVehicles[0]->VectorFront(); // wektor w kierunku jazdy/szukania
|
auto const dir = startdir * pVehicles[0]->VectorFront(); // wektor w kierunku jazdy/szukania
|
||||||
if( !scantrack ) {
|
if( !scantrack ) {
|
||||||
// jeśli wstecz wykryto koniec toru to raczej nic się nie da w takiej sytuacji zrobić
|
// jeśli wstecz wykryto koniec toru to raczej nic się nie da w takiej sytuacji zrobić
|
||||||
return cm_Unknown;
|
return TCommandType::cm_Unknown;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// a jeśli są dalej tory
|
// a jeśli są dalej tory
|
||||||
@@ -5789,7 +5789,7 @@ TCommandType TController::BackwardScan()
|
|||||||
#if LOGBACKSCAN
|
#if LOGBACKSCAN
|
||||||
WriteLog(edir + " - ignored as not passed yet");
|
WriteLog(edir + " - ignored as not passed yet");
|
||||||
#endif
|
#endif
|
||||||
return cm_Unknown; // nic
|
return TCommandType::cm_Unknown; // nic
|
||||||
}
|
}
|
||||||
vmechmax = e->ValueGet(1); // prędkość przy tym semaforze
|
vmechmax = e->ValueGet(1); // prędkość przy tym semaforze
|
||||||
// przeliczamy odległość od semafora - potrzebne by były współrzędne początku składu
|
// przeliczamy odległość od semafora - potrzebne by były współrzędne początku składu
|
||||||
@@ -5799,7 +5799,7 @@ TCommandType TController::BackwardScan()
|
|||||||
scandist = 0;
|
scandist = 0;
|
||||||
}
|
}
|
||||||
bool move = false; // czy AI w trybie manewerowym ma dociągnąć pod S1
|
bool move = false; // czy AI w trybie manewerowym ma dociągnąć pod S1
|
||||||
if( e->Command() == cm_SetVelocity ) {
|
if( e->Command() == TCommandType::cm_SetVelocity ) {
|
||||||
if( ( vmechmax == 0.0 ) ?
|
if( ( vmechmax == 0.0 ) ?
|
||||||
( OrderCurrentGet() & ( Shunt | Connect ) ) :
|
( OrderCurrentGet() & ( Shunt | Connect ) ) :
|
||||||
( OrderCurrentGet() & Connect ) ) { // przy podczepianiu ignorować wyjazd?
|
( OrderCurrentGet() & Connect ) ) { // przy podczepianiu ignorować wyjazd?
|
||||||
@@ -5818,8 +5818,8 @@ TCommandType TController::BackwardScan()
|
|||||||
// SetProximityVelocity(scandist,vmechmax,&sl);
|
// SetProximityVelocity(scandist,vmechmax,&sl);
|
||||||
return (
|
return (
|
||||||
vmechmax > 0 ?
|
vmechmax > 0 ?
|
||||||
cm_SetVelocity :
|
TCommandType::cm_SetVelocity :
|
||||||
cm_Unknown );
|
TCommandType::cm_Unknown );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// ustawiamy prędkość tylko wtedy, gdy ma ruszyć, stanąć albo ma stać
|
// ustawiamy prędkość tylko wtedy, gdy ma ruszyć, stanąć albo ma stać
|
||||||
@@ -5835,15 +5835,15 @@ TCommandType TController::BackwardScan()
|
|||||||
#endif
|
#endif
|
||||||
return (
|
return (
|
||||||
vmechmax > 0 ?
|
vmechmax > 0 ?
|
||||||
cm_SetVelocity :
|
TCommandType::cm_SetVelocity :
|
||||||
cm_Unknown );
|
TCommandType::cm_Unknown );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (OrderCurrentGet() ? OrderCurrentGet() & (Shunt | Connect) :
|
if (OrderCurrentGet() ? OrderCurrentGet() & (Shunt | Connect) :
|
||||||
true) // w Wait_for_orders też widzi tarcze
|
true) // w Wait_for_orders też widzi tarcze
|
||||||
{ // reakcja AI w trybie manewrowym dodatkowo na sygnały manewrowe
|
{ // reakcja AI w trybie manewrowym dodatkowo na sygnały manewrowe
|
||||||
if (move ? true : e->Command() == cm_ShuntVelocity)
|
if (move ? true : e->Command() == TCommandType::cm_ShuntVelocity)
|
||||||
{ // jeśli powyżej było SetVelocity 0 0, to dociągamy pod S1
|
{ // jeśli powyżej było SetVelocity 0 0, to dociągamy pod S1
|
||||||
if ((scandist > fMinProximityDist) ?
|
if ((scandist > fMinProximityDist) ?
|
||||||
(mvOccupied->Vel > 0.0) || (vmechmax == 0.0) :
|
(mvOccupied->Vel > 0.0) || (vmechmax == 0.0) :
|
||||||
@@ -5861,8 +5861,8 @@ TCommandType TController::BackwardScan()
|
|||||||
#endif
|
#endif
|
||||||
// SetProximityVelocity(scandist,vmechmax,&sl);
|
// SetProximityVelocity(scandist,vmechmax,&sl);
|
||||||
return (iDrivigFlags & moveTrackEnd) ?
|
return (iDrivigFlags & moveTrackEnd) ?
|
||||||
cm_ChangeDirection :
|
TCommandType::cm_ChangeDirection :
|
||||||
cm_Unknown; // jeśli jedzie na W5 albo koniec toru,
|
TCommandType::cm_Unknown; // jeśli jedzie na W5 albo koniec toru,
|
||||||
// to można zmienić kierunek
|
// to można zmienić kierunek
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5880,8 +5880,8 @@ TCommandType TController::BackwardScan()
|
|||||||
#endif
|
#endif
|
||||||
return (
|
return (
|
||||||
vmechmax > 0 ?
|
vmechmax > 0 ?
|
||||||
cm_ShuntVelocity :
|
TCommandType::cm_ShuntVelocity :
|
||||||
cm_Unknown );
|
TCommandType::cm_Unknown );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((vmechmax != 0.0) && (scandist < 100.0)) {
|
if ((vmechmax != 0.0) && (scandist < 100.0)) {
|
||||||
@@ -5892,19 +5892,19 @@ TCommandType TController::BackwardScan()
|
|||||||
#endif
|
#endif
|
||||||
return (
|
return (
|
||||||
vmechmax > 0 ?
|
vmechmax > 0 ?
|
||||||
cm_ShuntVelocity :
|
TCommandType::cm_ShuntVelocity :
|
||||||
cm_Unknown );
|
TCommandType::cm_Unknown );
|
||||||
}
|
}
|
||||||
} // if (move?...
|
} // if (move?...
|
||||||
} // if (OrderCurrentGet()==Shunt)
|
} // if (OrderCurrentGet()==Shunt)
|
||||||
if (!e->bEnabled) // jeśli skanowany
|
if (!e->bEnabled) // jeśli skanowany
|
||||||
if (e->StopCommand()) // a podłączona komórka ma komendę
|
if (e->StopCommand()) // a podłączona komórka ma komendę
|
||||||
return cm_Command; // to też się obrócić
|
return TCommandType::cm_Command; // to też się obrócić
|
||||||
} // if (e->Type==tp_GetValues)
|
} // if (e->Type==tp_GetValues)
|
||||||
} // if (e)
|
} // if (e)
|
||||||
} // if (scantrack)
|
} // if (scantrack)
|
||||||
} // if (scandir!=0.0)
|
} // if (scandir!=0.0)
|
||||||
return cm_Unknown; // nic
|
return TCommandType::cm_Unknown; // nic
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string TController::NextStop()
|
std::string TController::NextStop()
|
||||||
|
|||||||
4
Driver.h
4
Driver.h
@@ -73,7 +73,7 @@ enum TStopReason
|
|||||||
stopError // z powodu błędu w obliczeniu drogi hamowania
|
stopError // z powodu błędu w obliczeniu drogi hamowania
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TAction
|
enum class TAction : int
|
||||||
{ // przechowanie aktualnego stanu AI od poprzedniego przebłysku świadomości
|
{ // przechowanie aktualnego stanu AI od poprzedniego przebłysku świadomości
|
||||||
actUnknown, // stan nieznany (domyślny na początku)
|
actUnknown, // stan nieznany (domyślny na początku)
|
||||||
actPantUp, // podnieś pantograf (info dla użytkownika)
|
actPantUp, // podnieś pantograf (info dla użytkownika)
|
||||||
@@ -223,7 +223,7 @@ private:
|
|||||||
double LastReactionTime = 0.0;
|
double LastReactionTime = 0.0;
|
||||||
double fActionTime = 0.0; // czas używany przy regulacji prędkości i zamykaniu drzwi
|
double fActionTime = 0.0; // czas używany przy regulacji prędkości i zamykaniu drzwi
|
||||||
double m_radiocontroltime{ 0.0 }; // timer used to control speed of radio operations
|
double m_radiocontroltime{ 0.0 }; // timer used to control speed of radio operations
|
||||||
TAction eAction { actUnknown }; // aktualny stan
|
TAction eAction { TAction::actUnknown }; // aktualny stan
|
||||||
public:
|
public:
|
||||||
inline
|
inline
|
||||||
TAction GetAction() {
|
TAction GetAction() {
|
||||||
|
|||||||
103
DynObj.cpp
103
DynObj.cpp
@@ -967,7 +967,7 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if( ( Mechanik != nullptr )
|
if( ( Mechanik != nullptr )
|
||||||
&& ( Mechanik->GetAction() != actSleep ) ) {
|
&& ( Mechanik->GetAction() != TAction::actSleep ) ) {
|
||||||
// rysowanie figurki mechanika
|
// rysowanie figurki mechanika
|
||||||
btMechanik1.Turn( MoverParameters->ActiveCab > 0 );
|
btMechanik1.Turn( MoverParameters->ActiveCab > 0 );
|
||||||
btMechanik2.Turn( MoverParameters->ActiveCab < 0 );
|
btMechanik2.Turn( MoverParameters->ActiveCab < 0 );
|
||||||
@@ -1828,7 +1828,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424"
|
|||||||
return 0.0; // zerowa długość to brak pojazdu
|
return 0.0; // zerowa długość to brak pojazdu
|
||||||
}
|
}
|
||||||
// ustawienie pozycji hamulca
|
// ustawienie pozycji hamulca
|
||||||
MoverParameters->LocalBrakePos = 0;
|
MoverParameters->LocalBrakePosA = 0.0;
|
||||||
if (driveractive)
|
if (driveractive)
|
||||||
{
|
{
|
||||||
if (Cab == 0)
|
if (Cab == 0)
|
||||||
@@ -2299,7 +2299,7 @@ TDynamicObject::create_controller( std::string const Type, bool const Trainset )
|
|||||||
|
|
||||||
if( asName == Global.asHumanCtrlVehicle ) {
|
if( asName == Global.asHumanCtrlVehicle ) {
|
||||||
// jeśli pojazd wybrany do prowadzenia
|
// jeśli pojazd wybrany do prowadzenia
|
||||||
if( MoverParameters->EngineType != Dumb ) {
|
if( MoverParameters->EngineType != TEngineType::Dumb ) {
|
||||||
// wsadzamy tam sterującego
|
// wsadzamy tam sterującego
|
||||||
Controller = Humandriver;
|
Controller = Humandriver;
|
||||||
}
|
}
|
||||||
@@ -2576,16 +2576,16 @@ bool TDynamicObject::UpdateForce(double dt, double dt1, bool FullVer)
|
|||||||
// initiates load change by specified amounts, with a platform on specified side
|
// initiates load change by specified amounts, with a platform on specified side
|
||||||
void TDynamicObject::LoadExchange( int const Disembark, int const Embark, int const Platform ) {
|
void TDynamicObject::LoadExchange( int const Disembark, int const Embark, int const Platform ) {
|
||||||
|
|
||||||
if( ( MoverParameters->DoorOpenCtrl == control::passenger )
|
if( ( MoverParameters->DoorOpenCtrl == control_t::passenger )
|
||||||
|| ( MoverParameters->DoorOpenCtrl == control::mixed ) ) {
|
|| ( MoverParameters->DoorOpenCtrl == control_t::mixed ) ) {
|
||||||
// jeśli jedzie do tyłu, to drzwi otwiera odwrotnie
|
// jeśli jedzie do tyłu, to drzwi otwiera odwrotnie
|
||||||
auto const lewe = ( DirectionGet() > 0 ) ? 1 : 2;
|
auto const lewe = ( DirectionGet() > 0 ) ? 1 : 2;
|
||||||
auto const prawe = 3 - lewe;
|
auto const prawe = 3 - lewe;
|
||||||
if( Platform & lewe ) {
|
if( Platform & lewe ) {
|
||||||
MoverParameters->DoorLeft( true, range::local );
|
MoverParameters->DoorLeft( true, range_t::local );
|
||||||
}
|
}
|
||||||
if( Platform & prawe ) {
|
if( Platform & prawe ) {
|
||||||
MoverParameters->DoorRight( true, range::local );
|
MoverParameters->DoorRight( true, range_t::local );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_exchange.unload_count += Disembark;
|
m_exchange.unload_count += Disembark;
|
||||||
@@ -2645,18 +2645,18 @@ void TDynamicObject::update_exchange( double const Deltatime ) {
|
|||||||
|
|
||||||
MoverParameters->LoadStatus = 0;
|
MoverParameters->LoadStatus = 0;
|
||||||
// if the exchange is completed (or canceled) close the door, if applicable
|
// if the exchange is completed (or canceled) close the door, if applicable
|
||||||
if( ( MoverParameters->DoorCloseCtrl == control::passenger )
|
if( ( MoverParameters->DoorCloseCtrl == control_t::passenger )
|
||||||
|| ( MoverParameters->DoorCloseCtrl == control::mixed ) ) {
|
|| ( MoverParameters->DoorCloseCtrl == control_t::mixed ) ) {
|
||||||
|
|
||||||
if( ( MoverParameters->Vel > 2.0 )
|
if( ( MoverParameters->Vel > 2.0 )
|
||||||
|| ( Random() < (
|
|| ( Random() < (
|
||||||
// remotely controlled door are more likely to be left open
|
// remotely controlled door are more likely to be left open
|
||||||
MoverParameters->DoorCloseCtrl == control::passenger ?
|
MoverParameters->DoorCloseCtrl == control_t::passenger ?
|
||||||
0.75 :
|
0.75 :
|
||||||
0.50 ) ) ) {
|
0.50 ) ) ) {
|
||||||
|
|
||||||
MoverParameters->DoorLeft( false, range::local );
|
MoverParameters->DoorLeft( false, range_t::local );
|
||||||
MoverParameters->DoorRight( false, range::local );
|
MoverParameters->DoorRight( false, range_t::local );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2794,7 +2794,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
return false; // a normalnie powinny mieć bEnabled==false
|
return false; // a normalnie powinny mieć bEnabled==false
|
||||||
|
|
||||||
// McZapkie-260202
|
// McZapkie-260202
|
||||||
if ((MoverParameters->EnginePowerSource.SourceType == CurrentCollector) &&
|
if ((MoverParameters->EnginePowerSource.SourceType == TPowerSource::CurrentCollector) &&
|
||||||
(MoverParameters->Power > 1.0)) // aby rozrządczy nie opuszczał silnikowemu
|
(MoverParameters->Power > 1.0)) // aby rozrządczy nie opuszczał silnikowemu
|
||||||
/*
|
/*
|
||||||
if ((MechInside) || (MoverParameters->TrainType == dt_EZT))
|
if ((MechInside) || (MoverParameters->TrainType == dt_EZT))
|
||||||
@@ -2817,7 +2817,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
// pressure switch safety measure -- open the line breaker, unless there's alternate source of traction voltage
|
// pressure switch safety measure -- open the line breaker, unless there's alternate source of traction voltage
|
||||||
if( MoverParameters->GetTrainsetVoltage() < 0.5 * MoverParameters->EnginePowerSource.MaxVoltage ) {
|
if( MoverParameters->GetTrainsetVoltage() < 0.5 * MoverParameters->EnginePowerSource.MaxVoltage ) {
|
||||||
// TODO: check whether line breaker should be open EMU-wide
|
// TODO: check whether line breaker should be open EMU-wide
|
||||||
MoverParameters->MainSwitch( false, ( MoverParameters->TrainType == dt_EZT ? range::unit : range::local ) );
|
MoverParameters->MainSwitch( false, ( MoverParameters->TrainType == dt_EZT ? range_t::unit : range_t::local ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -2825,7 +2825,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
// and prevents their activation until pressure switch is set again
|
// and prevents their activation until pressure switch is set again
|
||||||
MoverParameters->PantPressLockActive = true;
|
MoverParameters->PantPressLockActive = true;
|
||||||
// TODO: separate 'heating allowed' from actual heating flag, so we can disable it here without messing up heating toggle
|
// TODO: separate 'heating allowed' from actual heating flag, so we can disable it here without messing up heating toggle
|
||||||
MoverParameters->ConverterSwitch( false, range::unit );
|
MoverParameters->ConverterSwitch( false, range_t::unit );
|
||||||
}
|
}
|
||||||
// mark the pressure switch as spent
|
// mark the pressure switch as spent
|
||||||
MoverParameters->PantPressSwitchActive = false;
|
MoverParameters->PantPressSwitchActive = false;
|
||||||
@@ -2923,7 +2923,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
// znane napięcia
|
// znane napięcia
|
||||||
// TTractionParam tmpTraction;
|
// TTractionParam tmpTraction;
|
||||||
// tmpTraction.TractionVoltage=0;
|
// tmpTraction.TractionVoltage=0;
|
||||||
if (MoverParameters->EnginePowerSource.SourceType == CurrentCollector)
|
if (MoverParameters->EnginePowerSource.SourceType == TPowerSource::CurrentCollector)
|
||||||
{ // dla EZT tylko silnikowy
|
{ // dla EZT tylko silnikowy
|
||||||
// if (Global.bLiveTraction)
|
// if (Global.bLiveTraction)
|
||||||
{ // Ra 2013-12: to niżej jest chyba trochę bez sensu
|
{ // Ra 2013-12: to niżej jest chyba trochę bez sensu
|
||||||
@@ -2988,7 +2988,7 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
{ // Ra 2F3F: do Driver.cpp to przenieść?
|
{ // Ra 2F3F: do Driver.cpp to przenieść?
|
||||||
MoverParameters->EqvtPipePress = GetEPP(); // srednie cisnienie w PG
|
MoverParameters->EqvtPipePress = GetEPP(); // srednie cisnienie w PG
|
||||||
if( ( Mechanik->Primary() )
|
if( ( Mechanik->Primary() )
|
||||||
&& ( MoverParameters->EngineType == ElectricInductionMotor ) ) {
|
&& ( MoverParameters->EngineType == TEngineType::ElectricInductionMotor ) ) {
|
||||||
// jesli glowny i z asynchronami, to niech steruje hamulcem lacznie dla calego pociagu/ezt
|
// jesli glowny i z asynchronami, to niech steruje hamulcem lacznie dla calego pociagu/ezt
|
||||||
auto const kier = (DirectionGet() * MoverParameters->ActiveCab > 0);
|
auto const kier = (DirectionGet() * MoverParameters->ActiveCab > 0);
|
||||||
auto FED { 0.0 };
|
auto FED { 0.0 };
|
||||||
@@ -3082,9 +3082,10 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
}
|
}
|
||||||
if ((Fzad > 1) && (!MEDLogFile.is_open()) && (MoverParameters->Vel > 1))
|
if ((Fzad > 1) && (!MEDLogFile.is_open()) && (MoverParameters->Vel > 1))
|
||||||
{
|
{
|
||||||
MEDLogFile.open(std::string("MEDLOGS/" + MoverParameters->Name + "_" + to_string(++MEDLogCount) + ".csv"),
|
MEDLogFile.open(
|
||||||
std::ios::in | std::ios::out | std::ios::trunc);
|
"MEDLOGS/" + MoverParameters->Name + "_" + to_string( ++MEDLogCount ) + ".csv",
|
||||||
MEDLogFile << std::string("t\tVel\tMasa\tOsie\tFmaxPN\tFmaxED\tFfulED\tFrED\tFzad\tFzadED\tFzadPN").c_str();
|
std::ios::in | std::ios::out | std::ios::trunc );
|
||||||
|
MEDLogFile << "t\tVel\tMasa\tOsie\tFmaxPN\tFmaxED\tFfulED\tFrED\tFzad\tFzadED\tFzadPN";
|
||||||
for(int k=1;k<=np;k++)
|
for(int k=1;k<=np;k++)
|
||||||
{
|
{
|
||||||
MEDLogFile << "\tBP" << k;
|
MEDLogFile << "\tBP" << k;
|
||||||
@@ -3095,8 +3096,8 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
MEDLogTime = 0;
|
MEDLogTime = 0;
|
||||||
}
|
}
|
||||||
auto FzadED { 0.0 };
|
auto FzadED { 0.0 };
|
||||||
if( ( MoverParameters->EpFuse && (MoverParameters->BrakeHandle != MHZ_EN57))
|
if( ( MoverParameters->EpFuse && (MoverParameters->BrakeHandle != TBrakeHandle::MHZ_EN57))
|
||||||
|| ( ( MoverParameters->BrakeHandle == MHZ_EN57 )
|
|| ( ( MoverParameters->BrakeHandle == TBrakeHandle::MHZ_EN57 )
|
||||||
&& ( MoverParameters->BrakeOpModeFlag & bom_MED ) ) ) {
|
&& ( MoverParameters->BrakeOpModeFlag & bom_MED ) ) ) {
|
||||||
FzadED = std::min( Fzad, FmaxED );
|
FzadED = std::min( Fzad, FmaxED );
|
||||||
}
|
}
|
||||||
@@ -3280,10 +3281,10 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
// NOTE: disabled on account of multi-unit setups, where the unmanned unit wouldn't be affected
|
// NOTE: disabled on account of multi-unit setups, where the unmanned unit wouldn't be affected
|
||||||
&& ( Controller == Humandriver )
|
&& ( Controller == Humandriver )
|
||||||
*/
|
*/
|
||||||
&& ( MoverParameters->EngineType != DieselEngine )
|
&& ( MoverParameters->EngineType != TEngineType::DieselEngine )
|
||||||
&& ( MoverParameters->EngineType != WheelsDriven ) )
|
&& ( MoverParameters->EngineType != TEngineType::WheelsDriven ) )
|
||||||
{ // jeśli bateria wyłączona, a nie diesel ani drezyna reczna
|
{ // jeśli bateria wyłączona, a nie diesel ani drezyna reczna
|
||||||
if( MoverParameters->MainSwitch( false, ( MoverParameters->TrainType == dt_EZT ? range::unit : range::local ) ) ) {
|
if( MoverParameters->MainSwitch( false, ( MoverParameters->TrainType == dt_EZT ? range_t::unit : range_t::local ) ) ) {
|
||||||
// wyłączyć zasilanie
|
// wyłączyć zasilanie
|
||||||
// NOTE: we turn off entire EMU, but only the affected unit for other multi-unit consists
|
// NOTE: we turn off entire EMU, but only the affected unit for other multi-unit consists
|
||||||
MoverParameters->EventFlag = true;
|
MoverParameters->EventFlag = true;
|
||||||
@@ -3625,8 +3626,8 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
else if (MoverParameters->EnginePowerSource.SourceType == InternalSource)
|
else if (MoverParameters->EnginePowerSource.SourceType == TPowerSource::InternalSource)
|
||||||
if (MoverParameters->EnginePowerSource.PowerType == SteamPower)
|
if (MoverParameters->EnginePowerSource.PowerType == TPowerType::SteamPower)
|
||||||
// if (smPatykird1[0])
|
// if (smPatykird1[0])
|
||||||
{ // Ra: animacja rozrządu parowozu, na razie nieoptymalizowane
|
{ // Ra: animacja rozrządu parowozu, na razie nieoptymalizowane
|
||||||
/* //Ra: tymczasowo wyłączone ze względu na porządkowanie animacji
|
/* //Ra: tymczasowo wyłączone ze względu na porządkowanie animacji
|
||||||
@@ -3986,7 +3987,7 @@ void TDynamicObject::RenderSounds() {
|
|||||||
// NBMX dzwiek przetwornicy
|
// NBMX dzwiek przetwornicy
|
||||||
if( MoverParameters->ConverterFlag ) {
|
if( MoverParameters->ConverterFlag ) {
|
||||||
frequency = (
|
frequency = (
|
||||||
MoverParameters->EngineType == ElectricSeriesMotor ?
|
MoverParameters->EngineType == TEngineType::ElectricSeriesMotor ?
|
||||||
( MoverParameters->RunningTraction.TractionVoltage / MoverParameters->NominalVoltage ) * MoverParameters->RList[ MoverParameters->RlistSize ].Mn :
|
( MoverParameters->RunningTraction.TractionVoltage / MoverParameters->NominalVoltage ) * MoverParameters->RList[ MoverParameters->RlistSize ].Mn :
|
||||||
1.0 );
|
1.0 );
|
||||||
frequency = sConverter.m_frequencyoffset + sConverter.m_frequencyfactor * frequency;
|
frequency = sConverter.m_frequencyoffset + sConverter.m_frequencyfactor * frequency;
|
||||||
@@ -4617,7 +4618,7 @@ void TDynamicObject::LoadMMediaFile( std::string BaseDir, std::string TypeName,
|
|||||||
}
|
}
|
||||||
if( !MoverParameters->LoadAccepted.empty() ) {
|
if( !MoverParameters->LoadAccepted.empty() ) {
|
||||||
|
|
||||||
if( ( MoverParameters->EnginePowerSource.SourceType == CurrentCollector )
|
if( ( MoverParameters->EnginePowerSource.SourceType == TPowerSource::CurrentCollector )
|
||||||
&& ( asLoadName == "pantstate" ) ) {
|
&& ( asLoadName == "pantstate" ) ) {
|
||||||
// wartość niby "pantstate" - nazwa dla formalności, ważna jest ilość
|
// wartość niby "pantstate" - nazwa dla formalności, ważna jest ilość
|
||||||
if( MoverParameters->Load == 1 ) {
|
if( MoverParameters->Load == 1 ) {
|
||||||
@@ -5075,7 +5076,7 @@ void TDynamicObject::LoadMMediaFile( std::string BaseDir, std::string TypeName,
|
|||||||
(k)
|
(k)
|
||||||
*/
|
*/
|
||||||
MoverParameters->EnginePowerSource.PowerType =
|
MoverParameters->EnginePowerSource.PowerType =
|
||||||
SteamPower; // Ra: po chamsku, ale z CHK nie działa
|
TPowerType::SteamPower; // Ra: po chamsku, ale z CHK nie działa
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( token == "animreturnprefix:" ) {
|
else if( token == "animreturnprefix:" ) {
|
||||||
@@ -5271,8 +5272,8 @@ void TDynamicObject::LoadMMediaFile( std::string BaseDir, std::string TypeName,
|
|||||||
m_powertrainsounds.engine.owner( this );
|
m_powertrainsounds.engine.owner( this );
|
||||||
|
|
||||||
auto const amplitudedivisor = static_cast<float>( (
|
auto const amplitudedivisor = static_cast<float>( (
|
||||||
MoverParameters->EngineType == DieselEngine ? 1 :
|
MoverParameters->EngineType == TEngineType::DieselEngine ? 1 :
|
||||||
MoverParameters->EngineType == DieselElectric ? 1 :
|
MoverParameters->EngineType == TEngineType::DieselElectric ? 1 :
|
||||||
MoverParameters->nmax * 60 + MoverParameters->Power * 3 ) );
|
MoverParameters->nmax * 60 + MoverParameters->Power * 3 ) );
|
||||||
m_powertrainsounds.engine.m_amplitudefactor /= amplitudedivisor;
|
m_powertrainsounds.engine.m_amplitudefactor /= amplitudedivisor;
|
||||||
}
|
}
|
||||||
@@ -6435,7 +6436,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
|
|
||||||
if( ( std::abs( Vehicle.enrot ) > 0.01 )
|
if( ( std::abs( Vehicle.enrot ) > 0.01 )
|
||||||
// McZapkie-280503: zeby dla dumb dzialal silnik na jalowych obrotach
|
// McZapkie-280503: zeby dla dumb dzialal silnik na jalowych obrotach
|
||||||
|| ( Vehicle.EngineType == Dumb ) ) {
|
|| ( Vehicle.EngineType == TEngineType::Dumb ) ) {
|
||||||
|
|
||||||
// frequency calculation
|
// frequency calculation
|
||||||
auto const normalizer { (
|
auto const normalizer { (
|
||||||
@@ -6449,14 +6450,14 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
engine.m_frequencyoffset
|
engine.m_frequencyoffset
|
||||||
+ engine.m_frequencyfactor * std::abs( Vehicle.enrot ) * normalizer;
|
+ engine.m_frequencyfactor * std::abs( Vehicle.enrot ) * normalizer;
|
||||||
|
|
||||||
if( Vehicle.EngineType == Dumb ) {
|
if( Vehicle.EngineType == TEngineType::Dumb ) {
|
||||||
frequency -= 0.2 * Vehicle.EnginePower / ( 1 + Vehicle.Power * 1000 );
|
frequency -= 0.2 * Vehicle.EnginePower / ( 1 + Vehicle.Power * 1000 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// base volume calculation
|
// base volume calculation
|
||||||
switch( Vehicle.EngineType ) {
|
switch( Vehicle.EngineType ) {
|
||||||
// TODO: check calculated values
|
// TODO: check calculated values
|
||||||
case DieselElectric: {
|
case TEngineType::DieselElectric: {
|
||||||
|
|
||||||
volume =
|
volume =
|
||||||
engine.m_amplitudeoffset
|
engine.m_amplitudeoffset
|
||||||
@@ -6465,7 +6466,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
+ 0.75 * ( Vehicle.enrot * 60 ) / ( Vehicle.DElist[ Vehicle.MainCtrlPosNo ].RPM ) );
|
+ 0.75 * ( Vehicle.enrot * 60 ) / ( Vehicle.DElist[ Vehicle.MainCtrlPosNo ].RPM ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case DieselEngine: {
|
case TEngineType::DieselEngine: {
|
||||||
if( Vehicle.enrot > 0.0 ) {
|
if( Vehicle.enrot > 0.0 ) {
|
||||||
volume = (
|
volume = (
|
||||||
Vehicle.EnginePower > 0 ?
|
Vehicle.EnginePower > 0 ?
|
||||||
@@ -6485,15 +6486,15 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
if( engine_volume >= 0.05 ) {
|
if( engine_volume >= 0.05 ) {
|
||||||
|
|
||||||
auto enginerevvolume { 0.f };
|
auto enginerevvolume { 0.f };
|
||||||
if( ( Vehicle.EngineType == DieselElectric )
|
if( ( Vehicle.EngineType == TEngineType::DieselElectric )
|
||||||
|| ( Vehicle.EngineType == DieselEngine ) ) {
|
|| ( Vehicle.EngineType == TEngineType::DieselEngine ) ) {
|
||||||
// diesel engine revolutions increase; it can potentially decrease volume of base engine sound
|
// diesel engine revolutions increase; it can potentially decrease volume of base engine sound
|
||||||
if( engine_revs_last != -1.f ) {
|
if( engine_revs_last != -1.f ) {
|
||||||
// calculate potential recent increase of engine revolutions
|
// calculate potential recent increase of engine revolutions
|
||||||
auto const revolutionsperminute { Vehicle.enrot * 60 };
|
auto const revolutionsperminute { Vehicle.enrot * 60 };
|
||||||
auto const revolutionsdifference { revolutionsperminute - engine_revs_last };
|
auto const revolutionsdifference { revolutionsperminute - engine_revs_last };
|
||||||
auto const idlerevolutionsthreshold { 1.01 * (
|
auto const idlerevolutionsthreshold { 1.01 * (
|
||||||
Vehicle.EngineType == DieselElectric ?
|
Vehicle.EngineType == TEngineType::DieselElectric ?
|
||||||
Vehicle.DElist[ 0 ].RPM :
|
Vehicle.DElist[ 0 ].RPM :
|
||||||
Vehicle.dizel_nmin * 60 ) };
|
Vehicle.dizel_nmin * 60 ) };
|
||||||
|
|
||||||
@@ -6620,13 +6621,13 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
|
|
||||||
// base volume calculation
|
// base volume calculation
|
||||||
switch( Vehicle.EngineType ) {
|
switch( Vehicle.EngineType ) {
|
||||||
case ElectricInductionMotor: {
|
case TEngineType::ElectricInductionMotor: {
|
||||||
volume =
|
volume =
|
||||||
motor.m_amplitudeoffset
|
motor.m_amplitudeoffset
|
||||||
+ motor.m_amplitudefactor * ( Vehicle.EnginePower + motorrevolutions * 2 );
|
+ motor.m_amplitudefactor * ( Vehicle.EnginePower + motorrevolutions * 2 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ElectricSeriesMotor: {
|
case TEngineType::ElectricSeriesMotor: {
|
||||||
volume =
|
volume =
|
||||||
motor.m_amplitudeoffset
|
motor.m_amplitudeoffset
|
||||||
+ motor.m_amplitudefactor * ( Vehicle.EnginePower / 1000 + motorrevolutions * 60.0 );
|
+ motor.m_amplitudefactor * ( Vehicle.EnginePower / 1000 + motorrevolutions * 60.0 );
|
||||||
@@ -6640,7 +6641,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( Vehicle.EngineType == ElectricSeriesMotor ) {
|
if( Vehicle.EngineType == TEngineType::ElectricSeriesMotor ) {
|
||||||
// volume variation
|
// volume variation
|
||||||
if( ( volume < 1.0 )
|
if( ( volume < 1.0 )
|
||||||
&& ( Vehicle.EnginePower < 100 ) ) {
|
&& ( Vehicle.EnginePower < 100 ) ) {
|
||||||
@@ -6691,7 +6692,7 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// inverter sounds
|
// inverter sounds
|
||||||
if( Vehicle.EngineType == ElectricInductionMotor ) {
|
if( Vehicle.EngineType == TEngineType::ElectricInductionMotor ) {
|
||||||
if( Vehicle.InverterFrequency > 0.1 ) {
|
if( Vehicle.InverterFrequency > 0.1 ) {
|
||||||
|
|
||||||
volume = inverter.m_amplitudeoffset + inverter.m_amplitudefactor * std::sqrt( std::abs( Vehicle.dizel_fill ) );
|
volume = inverter.m_amplitudeoffset + inverter.m_amplitudefactor * std::sqrt( std::abs( Vehicle.dizel_fill ) );
|
||||||
@@ -6718,8 +6719,8 @@ TDynamicObject::powertrain_sounds::render( TMoverParameters const &Vehicle, doub
|
|||||||
rsWentylator.stop();
|
rsWentylator.stop();
|
||||||
}
|
}
|
||||||
// radiator fan sounds
|
// radiator fan sounds
|
||||||
if( ( Vehicle.EngineType == DieselEngine )
|
if( ( Vehicle.EngineType == TEngineType::DieselEngine )
|
||||||
|| ( Vehicle.EngineType == DieselElectric ) ) {
|
|| ( Vehicle.EngineType == TEngineType::DieselElectric ) ) {
|
||||||
|
|
||||||
if( Vehicle.dizel_heat.rpmw > 0.1 ) {
|
if( Vehicle.dizel_heat.rpmw > 0.1 ) {
|
||||||
// NOTE: fan speed tends to max out at ~100 rpm; by default we try to get pitch range of 0.5-1.5 and volume range of 0.5-1.0
|
// NOTE: fan speed tends to max out at ~100 rpm; by default we try to get pitch range of 0.5-1.5 and volume range of 0.5-1.0
|
||||||
@@ -6813,7 +6814,7 @@ vehicle_table::update( double Deltatime, int Iterationcount ) {
|
|||||||
for( auto *vehicle : m_items ) {
|
for( auto *vehicle : m_items ) {
|
||||||
if( false == vehicle->bEnabled ) { continue; }
|
if( false == vehicle->bEnabled ) { continue; }
|
||||||
// Ra: zmienić warunek na sprawdzanie pantografów w jednej zmiennej: czy pantografy i czy podniesione
|
// Ra: zmienić warunek na sprawdzanie pantografów w jednej zmiennej: czy pantografy i czy podniesione
|
||||||
if( vehicle->MoverParameters->EnginePowerSource.SourceType == CurrentCollector ) {
|
if( vehicle->MoverParameters->EnginePowerSource.SourceType == TPowerSource::CurrentCollector ) {
|
||||||
update_traction( vehicle );
|
update_traction( vehicle );
|
||||||
}
|
}
|
||||||
vehicle->MoverParameters->ComputeConstans();
|
vehicle->MoverParameters->ComputeConstans();
|
||||||
@@ -6989,16 +6990,22 @@ vehicle_table::erase_disabled() {
|
|||||||
++vehicleiter;
|
++vehicleiter;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if( vehicle->MyTrack != nullptr ) {
|
if( ( vehicle->MyTrack != nullptr )
|
||||||
vehicle->MyTrack->RemoveDynamicObject( vehicle );
|
&& ( true == vehicle->MyTrack->RemoveDynamicObject( vehicle ) ) ) {
|
||||||
|
vehicle->MyTrack = nullptr;
|
||||||
}
|
}
|
||||||
// clear potential train binding
|
// clear potential train binding
|
||||||
Global.pWorld->TrainDelete( vehicle );
|
Global.pWorld->TrainDelete( vehicle );
|
||||||
// remove potential entries in the light array
|
// remove potential entries in the light array
|
||||||
simulation::Lights.remove( vehicle );
|
simulation::Lights.remove( vehicle );
|
||||||
|
/*
|
||||||
// finally get rid of the vehicle and its record themselves
|
// finally get rid of the vehicle and its record themselves
|
||||||
|
// BUG: deleting the vehicle leaves dangling pointers in event->Activator and potentially elsewhere
|
||||||
|
// TBD, TODO: either mark 'dead' vehicles with additional flag, or delete the references as well
|
||||||
SafeDelete( vehicle );
|
SafeDelete( vehicle );
|
||||||
vehicleiter = m_items.erase( vehicleiter );
|
vehicleiter = m_items.erase( vehicleiter );
|
||||||
|
*/
|
||||||
|
++vehicleiter; // NOTE: instead of the erase in the disabled section
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// ...and call it a day
|
// ...and call it a day
|
||||||
|
|||||||
16
Event.cpp
16
Event.cpp
@@ -297,37 +297,37 @@ void TEvent::Load(cParser *parser, Math3D::vector3 const &org)
|
|||||||
if (token.find('#') != std::string::npos)
|
if (token.find('#') != std::string::npos)
|
||||||
token.erase(token.find('#')); // obcięcie unikatowości
|
token.erase(token.find('#')); // obcięcie unikatowości
|
||||||
win1250_to_ascii( token ); // get rid of non-ascii chars
|
win1250_to_ascii( token ); // get rid of non-ascii chars
|
||||||
Params[6].asCommand = cm_PassengerStopPoint;
|
Params[6].asCommand = TCommandType::cm_PassengerStopPoint;
|
||||||
// nie do kolejki (dla SetVelocity też, ale jak jest do toru dowiązany)
|
// nie do kolejki (dla SetVelocity też, ale jak jest do toru dowiązany)
|
||||||
bEnabled = false;
|
bEnabled = false;
|
||||||
}
|
}
|
||||||
else if (token == "SetVelocity")
|
else if (token == "SetVelocity")
|
||||||
{
|
{
|
||||||
bEnabled = false;
|
bEnabled = false;
|
||||||
Params[6].asCommand = cm_SetVelocity;
|
Params[6].asCommand = TCommandType::cm_SetVelocity;
|
||||||
}
|
}
|
||||||
else if (token == "RoadVelocity")
|
else if (token == "RoadVelocity")
|
||||||
{
|
{
|
||||||
bEnabled = false;
|
bEnabled = false;
|
||||||
Params[6].asCommand = cm_RoadVelocity;
|
Params[6].asCommand = TCommandType::cm_RoadVelocity;
|
||||||
}
|
}
|
||||||
else if (token == "SectionVelocity")
|
else if (token == "SectionVelocity")
|
||||||
{
|
{
|
||||||
bEnabled = false;
|
bEnabled = false;
|
||||||
Params[6].asCommand = cm_SectionVelocity;
|
Params[6].asCommand = TCommandType::cm_SectionVelocity;
|
||||||
}
|
}
|
||||||
else if (token == "ShuntVelocity")
|
else if (token == "ShuntVelocity")
|
||||||
{
|
{
|
||||||
bEnabled = false;
|
bEnabled = false;
|
||||||
Params[6].asCommand = cm_ShuntVelocity;
|
Params[6].asCommand = TCommandType::cm_ShuntVelocity;
|
||||||
}
|
}
|
||||||
else if (token == "OutsideStation")
|
else if (token == "OutsideStation")
|
||||||
{
|
{
|
||||||
bEnabled = false; // ma być skanowny, aby AI nie przekraczało W5
|
bEnabled = false; // ma być skanowny, aby AI nie przekraczało W5
|
||||||
Params[6].asCommand = cm_OutsideStation;
|
Params[6].asCommand = TCommandType::cm_OutsideStation;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Params[6].asCommand = cm_Unknown;
|
Params[6].asCommand = TCommandType::cm_Unknown;
|
||||||
Params[0].asText = new char[token.size() + 1];
|
Params[0].asText = new char[token.size() + 1];
|
||||||
strcpy(Params[0].asText, token.c_str());
|
strcpy(Params[0].asText, token.c_str());
|
||||||
parser->getTokens();
|
parser->getTokens();
|
||||||
@@ -817,7 +817,7 @@ TCommandType TEvent::Command()
|
|||||||
case tp_PutValues:
|
case tp_PutValues:
|
||||||
return Params[6].asCommand; // komenda zakodowana binarnie
|
return Params[6].asCommand; // komenda zakodowana binarnie
|
||||||
}
|
}
|
||||||
return cm_Unknown; // inne eventy się nie liczą
|
return TCommandType::cm_Unknown; // inne eventy się nie liczą
|
||||||
};
|
};
|
||||||
|
|
||||||
double TEvent::ValueGet(int n)
|
double TEvent::ValueGet(int n)
|
||||||
|
|||||||
30
Gauge.cpp
30
Gauge.cpp
@@ -45,7 +45,7 @@ void TGauge::Init(TSubModel *Submodel, TGaugeType Type, float Scale, float Offse
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_type == gt_Digital ) {
|
if( m_type == TGaugeType::gt_Digital ) {
|
||||||
|
|
||||||
TSubModel *sm = SubModel->ChildGet();
|
TSubModel *sm = SubModel->ChildGet();
|
||||||
do {
|
do {
|
||||||
@@ -148,18 +148,18 @@ bool TGauge::Load( cParser &Parser, TDynamicObject const *Owner, TModel3d *md1,
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::map<std::string, TGaugeType> gaugetypes {
|
std::map<std::string, TGaugeType> gaugetypes {
|
||||||
{ "rot", gt_Rotate },
|
{ "rot", TGaugeType::gt_Rotate },
|
||||||
{ "rotvar", gt_Rotate },
|
{ "rotvar", TGaugeType::gt_Rotate },
|
||||||
{ "mov", gt_Move },
|
{ "mov", TGaugeType::gt_Move },
|
||||||
{ "movvar", gt_Move },
|
{ "movvar", TGaugeType::gt_Move },
|
||||||
{ "wip", gt_Wiper },
|
{ "wip", TGaugeType::gt_Wiper },
|
||||||
{ "dgt", gt_Digital }
|
{ "dgt", TGaugeType::gt_Digital }
|
||||||
};
|
};
|
||||||
auto lookup = gaugetypes.find( gaugetypename );
|
auto lookup = gaugetypes.find( gaugetypename );
|
||||||
auto const type = (
|
auto const type = (
|
||||||
lookup != gaugetypes.end() ?
|
lookup != gaugetypes.end() ?
|
||||||
lookup->second :
|
lookup->second :
|
||||||
gt_Unknown );
|
TGaugeType::gt_Unknown );
|
||||||
|
|
||||||
Init( submodel, type, scale, offset, friction, 0, endvalue, endscale, interpolatescale );
|
Init( submodel, type, scale, offset, friction, 0, endvalue, endscale, interpolatescale );
|
||||||
|
|
||||||
@@ -228,16 +228,16 @@ TGauge::UpdateValue( float fNewDesired, sound_source *Fallbacksound ) {
|
|||||||
if( ( currentvalue < fNewDesired )
|
if( ( currentvalue < fNewDesired )
|
||||||
&& ( false == m_soundfxincrease.empty() ) ) {
|
&& ( false == m_soundfxincrease.empty() ) ) {
|
||||||
// shift up
|
// shift up
|
||||||
m_soundfxincrease.play();
|
m_soundfxincrease.play( sound_flags::exclusive );
|
||||||
}
|
}
|
||||||
else if( ( currentvalue > fNewDesired )
|
else if( ( currentvalue > fNewDesired )
|
||||||
&& ( false == m_soundfxdecrease.empty() ) ) {
|
&& ( false == m_soundfxdecrease.empty() ) ) {
|
||||||
// shift down
|
// shift down
|
||||||
m_soundfxdecrease.play();
|
m_soundfxdecrease.play( sound_flags::exclusive );
|
||||||
}
|
}
|
||||||
else if( Fallbacksound != nullptr ) {
|
else if( Fallbacksound != nullptr ) {
|
||||||
// ...and if that fails too, try the provided fallback sound from legacy system
|
// ...and if that fails too, try the provided fallback sound from legacy system
|
||||||
Fallbacksound->play();
|
Fallbacksound->play( sound_flags::exclusive );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -276,15 +276,15 @@ void TGauge::Update() {
|
|||||||
if( SubModel )
|
if( SubModel )
|
||||||
{ // warunek na wszelki wypadek, gdyby się submodel nie podłączył
|
{ // warunek na wszelki wypadek, gdyby się submodel nie podłączył
|
||||||
switch (m_type) {
|
switch (m_type) {
|
||||||
case gt_Rotate: {
|
case TGaugeType::gt_Rotate: {
|
||||||
SubModel->SetRotate( float3( 0, 1, 0 ), GetScaledValue() * 360.0 );
|
SubModel->SetRotate( float3( 0, 1, 0 ), GetScaledValue() * 360.0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case gt_Move: {
|
case TGaugeType::gt_Move: {
|
||||||
SubModel->SetTranslate( float3( 0, 0, GetScaledValue() ) );
|
SubModel->SetTranslate( float3( 0, 0, GetScaledValue() ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case gt_Wiper: {
|
case TGaugeType::gt_Wiper: {
|
||||||
auto const scaledvalue { GetScaledValue() };
|
auto const scaledvalue { GetScaledValue() };
|
||||||
SubModel->SetRotate( float3( 0, 1, 0 ), scaledvalue * 360.0 );
|
SubModel->SetRotate( float3( 0, 1, 0 ), scaledvalue * 360.0 );
|
||||||
auto *sm = SubModel->ChildGet();
|
auto *sm = SubModel->ChildGet();
|
||||||
@@ -296,7 +296,7 @@ void TGauge::Update() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case gt_Digital: {
|
case TGaugeType::gt_Digital: {
|
||||||
// Ra 2014-07: licznik cyfrowy
|
// Ra 2014-07: licznik cyfrowy
|
||||||
auto *sm = SubModel->ChildGet();
|
auto *sm = SubModel->ChildGet();
|
||||||
/* std::string n = FormatFloat( "0000000000", floor( fValue ) ); // na razie tak trochę bez sensu
|
/* std::string n = FormatFloat( "0000000000", floor( fValue ) ); // na razie tak trochę bez sensu
|
||||||
|
|||||||
4
Gauge.h
4
Gauge.h
@@ -12,7 +12,7 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
#include "Classes.h"
|
#include "Classes.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
|
|
||||||
enum TGaugeType {
|
enum class TGaugeType {
|
||||||
// typ ruchu
|
// typ ruchu
|
||||||
gt_Unknown, // na razie nie znany
|
gt_Unknown, // na razie nie znany
|
||||||
gt_Rotate, // obrót
|
gt_Rotate, // obrót
|
||||||
@@ -60,7 +60,7 @@ private:
|
|||||||
GetScaledValue() const;
|
GetScaledValue() const;
|
||||||
|
|
||||||
// members
|
// members
|
||||||
TGaugeType m_type { gt_Unknown }; // typ ruchu
|
TGaugeType m_type { TGaugeType::gt_Unknown }; // typ ruchu
|
||||||
float m_friction { 0.f }; // hamowanie przy zliżaniu się do zadanej wartości
|
float m_friction { 0.f }; // hamowanie przy zliżaniu się do zadanej wartości
|
||||||
float m_targetvalue { 0.f }; // wartość docelowa
|
float m_targetvalue { 0.f }; // wartość docelowa
|
||||||
float m_value { 0.f }; // wartość obecna
|
float m_value { 0.f }; // wartość obecna
|
||||||
|
|||||||
103
McZapkie/MOVER.h
103
McZapkie/MOVER.h
@@ -156,13 +156,13 @@ enum coupling {
|
|||||||
uic = 0x100
|
uic = 0x100
|
||||||
};
|
};
|
||||||
// possible effect ranges for control commands; exclusive
|
// possible effect ranges for control commands; exclusive
|
||||||
enum range {
|
enum class range_t {
|
||||||
local,
|
local,
|
||||||
unit,
|
unit,
|
||||||
consist
|
consist
|
||||||
};
|
};
|
||||||
// start method for devices; exclusive
|
// start method for devices; exclusive
|
||||||
enum start {
|
enum class start_t {
|
||||||
manual,
|
manual,
|
||||||
automatic,
|
automatic,
|
||||||
manualwithautofallback,
|
manualwithautofallback,
|
||||||
@@ -180,7 +180,7 @@ enum light {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// door operation methods; exclusive
|
// door operation methods; exclusive
|
||||||
enum control {
|
enum control_t {
|
||||||
passenger, // local, opened/closed for duration of loading
|
passenger, // local, opened/closed for duration of loading
|
||||||
driver, // remote, operated by the driver
|
driver, // remote, operated by the driver
|
||||||
autonomous, // local, closed when vehicle moves and/or after timeout
|
autonomous, // local, closed when vehicle moves and/or after timeout
|
||||||
@@ -351,13 +351,13 @@ struct TTractionParam
|
|||||||
/*powyzsze parametry zwiazane sa z torem po ktorym aktualnie pojazd jedzie*/
|
/*powyzsze parametry zwiazane sa z torem po ktorym aktualnie pojazd jedzie*/
|
||||||
|
|
||||||
/*typy hamulcow zespolonych*/
|
/*typy hamulcow zespolonych*/
|
||||||
enum TBrakeSystem { Individual, Pneumatic, ElectroPneumatic };
|
enum class TBrakeSystem { Individual, Pneumatic, ElectroPneumatic };
|
||||||
/*podtypy hamulcow zespolonych*/
|
/*podtypy hamulcow zespolonych*/
|
||||||
enum TBrakeSubSystem { ss_None, ss_W, ss_K, ss_KK, ss_Hik, ss_ESt, ss_KE, ss_LSt, ss_MT, ss_Dako };
|
enum class TBrakeSubSystem { ss_None, ss_W, ss_K, ss_KK, ss_Hik, ss_ESt, ss_KE, ss_LSt, ss_MT, ss_Dako };
|
||||||
enum TBrakeValve { NoValve, W, W_Lu_VI, W_Lu_L, W_Lu_XR, K, Kg, Kp, Kss, Kkg, Kkp, Kks, Hikg1, Hikss, Hikp1, KE, SW, EStED, NESt3, ESt3, LSt, ESt4, ESt3AL2, EP1, EP2, M483, CV1_L_TR, CV1, CV1_R, Other };
|
enum class TBrakeValve { NoValve, W, W_Lu_VI, W_Lu_L, W_Lu_XR, K, Kg, Kp, Kss, Kkg, Kkp, Kks, Hikg1, Hikss, Hikp1, KE, SW, EStED, NESt3, ESt3, LSt, ESt4, ESt3AL2, EP1, EP2, M483, CV1_L_TR, CV1, CV1_R, Other };
|
||||||
enum TBrakeHandle { NoHandle, West, FV4a, M394, M254, FVel1, FVel6, D2, Knorr, FD1, BS2, testH, St113, MHZ_P, MHZ_T, MHZ_EN57, MHZ_K5P };
|
enum class TBrakeHandle { NoHandle, West, FV4a, M394, M254, FVel1, FVel6, D2, Knorr, FD1, BS2, testH, St113, MHZ_P, MHZ_T, MHZ_EN57, MHZ_K5P };
|
||||||
/*typy hamulcow indywidualnych*/
|
/*typy hamulcow indywidualnych*/
|
||||||
enum TLocalBrake { NoBrake, ManualBrake, PneumaticBrake, HydraulicBrake };
|
enum class TLocalBrake { NoBrake, ManualBrake, PneumaticBrake, HydraulicBrake };
|
||||||
/*dla osob/towar: opoznienie hamowania/odhamowania*/
|
/*dla osob/towar: opoznienie hamowania/odhamowania*/
|
||||||
typedef double TBrakeDelayTable[4];
|
typedef double TBrakeDelayTable[4];
|
||||||
|
|
||||||
@@ -366,17 +366,17 @@ struct TBrakePressure
|
|||||||
double PipePressureVal = 0.0;
|
double PipePressureVal = 0.0;
|
||||||
double BrakePressureVal = 0.0;
|
double BrakePressureVal = 0.0;
|
||||||
double FlowSpeedVal = 0.0;
|
double FlowSpeedVal = 0.0;
|
||||||
TBrakeSystem BrakeType = Pneumatic;
|
TBrakeSystem BrakeType = TBrakeSystem::Pneumatic;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::map<int,TBrakePressure> TBrakePressureTable;
|
typedef std::map<int,TBrakePressure> TBrakePressureTable;
|
||||||
|
|
||||||
/*typy napedow*/
|
/*typy napedow*/
|
||||||
enum TEngineTypes { None, Dumb, WheelsDriven, ElectricSeriesMotor, ElectricInductionMotor, DieselEngine, SteamEngine, DieselElectric };
|
enum class TEngineType { None, Dumb, WheelsDriven, ElectricSeriesMotor, ElectricInductionMotor, DieselEngine, SteamEngine, DieselElectric };
|
||||||
/*postac dostarczanej energii*/
|
/*postac dostarczanej energii*/
|
||||||
enum TPowerType { NoPower, BioPower, MechPower, ElectricPower, SteamPower };
|
enum class TPowerType { NoPower, BioPower, MechPower, ElectricPower, SteamPower };
|
||||||
/*rodzaj paliwa*/
|
/*rodzaj paliwa*/
|
||||||
enum TFuelType { Undefined, Coal, Oil };
|
enum class TFuelType { Undefined, Coal, Oil };
|
||||||
/*rodzaj rusztu*/
|
/*rodzaj rusztu*/
|
||||||
struct TGrateType {
|
struct TGrateType {
|
||||||
TFuelType FuelType;
|
TFuelType FuelType;
|
||||||
@@ -425,7 +425,7 @@ struct TCurrentCollector {
|
|||||||
//}
|
//}
|
||||||
};
|
};
|
||||||
/*typy źródeł mocy*/
|
/*typy źródeł mocy*/
|
||||||
enum TPowerSource { NotDefined, InternalSource, Transducer, Generator, Accumulator, CurrentCollector, PowerCable, Heater };
|
enum class TPowerSource { NotDefined, InternalSource, Transducer, Generator, Accumulator, CurrentCollector, PowerCable, Heater };
|
||||||
|
|
||||||
|
|
||||||
struct _mover__1
|
struct _mover__1
|
||||||
@@ -481,7 +481,7 @@ struct TPowerParameters
|
|||||||
};
|
};
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
TEngineTypes GeneratorEngine;
|
TEngineType GeneratorEngine;
|
||||||
};
|
};
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@@ -498,9 +498,9 @@ struct TPowerParameters
|
|||||||
MaxVoltage = 0.0;
|
MaxVoltage = 0.0;
|
||||||
MaxCurrent = 0.0;
|
MaxCurrent = 0.0;
|
||||||
IntR = 0.001;
|
IntR = 0.001;
|
||||||
SourceType = NotDefined;
|
SourceType = TPowerSource::NotDefined;
|
||||||
PowerType = NoPower;
|
PowerType = TPowerType::NoPower;
|
||||||
RPowerCable.PowerTrans = NoPower;
|
RPowerCable.PowerTrans = TPowerType::NoPower;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -584,7 +584,7 @@ struct TTransmision
|
|||||||
double Ratio = 1.0;
|
double Ratio = 1.0;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum TCouplerType { NoCoupler, Articulated, Bare, Chain, Screw, Automatic };
|
enum class TCouplerType { NoCoupler, Articulated, Bare, Chain, Screw, Automatic };
|
||||||
|
|
||||||
struct power_coupling {
|
struct power_coupling {
|
||||||
double current{ 0.0 };
|
double current{ 0.0 };
|
||||||
@@ -601,7 +601,7 @@ struct TCoupling {
|
|||||||
double FmaxB = 1000.0;
|
double FmaxB = 1000.0;
|
||||||
double DmaxC = 0.1;
|
double DmaxC = 0.1;
|
||||||
double FmaxC = 1000.0;
|
double FmaxC = 1000.0;
|
||||||
TCouplerType CouplerType = NoCoupler; /*typ sprzegu*/
|
TCouplerType CouplerType = TCouplerType::NoCoupler; /*typ sprzegu*/
|
||||||
/*zmienne*/
|
/*zmienne*/
|
||||||
int CouplingFlag = 0; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/
|
int CouplingFlag = 0; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/
|
||||||
int AllowedFlag = 3; //Ra: znaczenie jak wyżej, maska dostępnych
|
int AllowedFlag = 3; //Ra: znaczenie jak wyżej, maska dostępnych
|
||||||
@@ -625,7 +625,7 @@ struct fuel_pump {
|
|||||||
|
|
||||||
bool is_enabled { false }; // device is allowed/requested to operate
|
bool is_enabled { false }; // device is allowed/requested to operate
|
||||||
bool is_active { false }; // device is working
|
bool is_active { false }; // device is working
|
||||||
start start_type { start::manual };
|
start_t start_type { start_t::manual };
|
||||||
};
|
};
|
||||||
|
|
||||||
// basic approximation of a fuel pump
|
// basic approximation of a fuel pump
|
||||||
@@ -634,7 +634,7 @@ struct oil_pump {
|
|||||||
|
|
||||||
bool is_enabled { false }; // device is allowed/requested to operate
|
bool is_enabled { false }; // device is allowed/requested to operate
|
||||||
bool is_active { false }; // device is working
|
bool is_active { false }; // device is working
|
||||||
start start_type { start::manual };
|
start_t start_type { start_t::manual };
|
||||||
float resource_amount { 1.f };
|
float resource_amount { 1.f };
|
||||||
float pressure_minimum { 0.f }; // lowest acceptable working pressure
|
float pressure_minimum { 0.f }; // lowest acceptable working pressure
|
||||||
float pressure_maximum { 0.65f }; // oil pressure at maximum engine revolutions
|
float pressure_maximum { 0.65f }; // oil pressure at maximum engine revolutions
|
||||||
@@ -647,7 +647,7 @@ struct water_pump {
|
|||||||
bool breaker { true }; // device is allowed to operate
|
bool breaker { true }; // device is allowed to operate
|
||||||
bool is_enabled { false }; // device is requested to operate
|
bool is_enabled { false }; // device is requested to operate
|
||||||
bool is_active { false }; // device is working
|
bool is_active { false }; // device is working
|
||||||
start start_type { start::manual };
|
start_t start_type { start_t::manual };
|
||||||
};
|
};
|
||||||
|
|
||||||
struct water_heater {
|
struct water_heater {
|
||||||
@@ -728,7 +728,7 @@ public:
|
|||||||
std::string TypeName; /*nazwa serii/typu*/
|
std::string TypeName; /*nazwa serii/typu*/
|
||||||
//TrainType: string; {typ: EZT/elektrowoz - Winger 040304}
|
//TrainType: string; {typ: EZT/elektrowoz - Winger 040304}
|
||||||
int TrainType = 0; /*Ra: powinno być szybciej niż string*/
|
int TrainType = 0; /*Ra: powinno być szybciej niż string*/
|
||||||
TEngineTypes EngineType = None; /*typ napedu*/
|
TEngineType EngineType = TEngineType::None; /*typ napedu*/
|
||||||
TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/
|
TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/
|
||||||
TPowerParameters SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/
|
TPowerParameters SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/
|
||||||
TPowerParameters HeatingPowerSource; /*zrodlo mocy dla ogrzewania*/
|
TPowerParameters HeatingPowerSource; /*zrodlo mocy dla ogrzewania*/
|
||||||
@@ -766,11 +766,11 @@ public:
|
|||||||
/*hamulce:*/
|
/*hamulce:*/
|
||||||
int NBpA = 0; /*ilosc el. ciernych na os: 0 1 2 lub 4*/
|
int NBpA = 0; /*ilosc el. ciernych na os: 0 1 2 lub 4*/
|
||||||
int SandCapacity = 0; /*zasobnik piasku [kg]*/
|
int SandCapacity = 0; /*zasobnik piasku [kg]*/
|
||||||
TBrakeSystem BrakeSystem = Individual;/*rodzaj hamulca zespolonego*/
|
TBrakeSystem BrakeSystem = TBrakeSystem::Individual;/*rodzaj hamulca zespolonego*/
|
||||||
TBrakeSubSystem BrakeSubsystem = ss_None ;
|
TBrakeSubSystem BrakeSubsystem = TBrakeSubSystem::ss_None ;
|
||||||
TBrakeValve BrakeValve = NoValve;
|
TBrakeValve BrakeValve = TBrakeValve::NoValve;
|
||||||
TBrakeHandle BrakeHandle = NoHandle;
|
TBrakeHandle BrakeHandle = TBrakeHandle::NoHandle;
|
||||||
TBrakeHandle BrakeLocHandle = NoHandle;
|
TBrakeHandle BrakeLocHandle = TBrakeHandle::NoHandle;
|
||||||
double MBPM = 1.0; /*masa najwiekszego cisnienia*/
|
double MBPM = 1.0; /*masa najwiekszego cisnienia*/
|
||||||
|
|
||||||
std::shared_ptr<TBrake> Hamulec;
|
std::shared_ptr<TBrake> Hamulec;
|
||||||
@@ -779,7 +779,7 @@ public:
|
|||||||
std::shared_ptr<TReservoir> Pipe;
|
std::shared_ptr<TReservoir> Pipe;
|
||||||
std::shared_ptr<TReservoir> Pipe2;
|
std::shared_ptr<TReservoir> Pipe2;
|
||||||
|
|
||||||
TLocalBrake LocalBrake = NoBrake; /*rodzaj hamulca indywidualnego*/
|
TLocalBrake LocalBrake = TLocalBrake::NoBrake; /*rodzaj hamulca indywidualnego*/
|
||||||
TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/
|
TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/
|
||||||
TBrakePressure BrakePressureActual; //wartości ważone dla aktualnej pozycji kranu
|
TBrakePressure BrakePressureActual; //wartości ważone dla aktualnej pozycji kranu
|
||||||
int ASBType = 0; /*0: brak hamulca przeciwposlizgowego, 1: reczny, 2: automat*/
|
int ASBType = 0; /*0: brak hamulca przeciwposlizgowego, 1: reczny, 2: automat*/
|
||||||
@@ -1006,9 +1006,9 @@ public:
|
|||||||
bool CompressorAllow = false; /*! zezwolenie na uruchomienie sprezarki NBMX*/
|
bool CompressorAllow = false; /*! zezwolenie na uruchomienie sprezarki NBMX*/
|
||||||
bool CompressorAllowLocal{ true }; // local device state override (most units don't have this fitted so it's set to true not to intefere)
|
bool CompressorAllowLocal{ true }; // local device state override (most units don't have this fitted so it's set to true not to intefere)
|
||||||
bool CompressorGovernorLock{ false }; // indicates whether compressor pressure switch was activated due to reaching cut-out pressure
|
bool CompressorGovernorLock{ false }; // indicates whether compressor pressure switch was activated due to reaching cut-out pressure
|
||||||
start CompressorStart{ start::manual }; // whether the compressor is started manually, or another way
|
start_t CompressorStart{ start_t::manual }; // whether the compressor is started manually, or another way
|
||||||
// TODO converter parameters, for when we start cleaning up mover parameters
|
// TODO converter parameters, for when we start cleaning up mover parameters
|
||||||
start ConverterStart{ start::manual }; // whether converter is started manually, or by other means
|
start_t ConverterStart{ start_t::manual }; // whether converter is started manually, or by other means
|
||||||
float ConverterStartDelay{ 0.0f }; // delay (in seconds) before the converter is started, once its activation conditions are met
|
float ConverterStartDelay{ 0.0f }; // delay (in seconds) before the converter is started, once its activation conditions are met
|
||||||
double ConverterStartDelayTimer{ 0.0 }; // helper, for tracking whether converter start delay passed
|
double ConverterStartDelayTimer{ 0.0 }; // helper, for tracking whether converter start delay passed
|
||||||
bool ConverterAllow = false; /*zezwolenie na prace przetwornicy NBMX*/
|
bool ConverterAllow = false; /*zezwolenie na prace przetwornicy NBMX*/
|
||||||
@@ -1024,7 +1024,6 @@ public:
|
|||||||
int BrakeCtrlPos = -2; /*nastawa hamulca zespolonego*/
|
int BrakeCtrlPos = -2; /*nastawa hamulca zespolonego*/
|
||||||
double BrakeCtrlPosR = 0.0; /*nastawa hamulca zespolonego - plynna dla FV4a*/
|
double BrakeCtrlPosR = 0.0; /*nastawa hamulca zespolonego - plynna dla FV4a*/
|
||||||
double BrakeCtrlPos2 = 0.0; /*nastawa hamulca zespolonego - kapturek dla FV4a*/
|
double BrakeCtrlPos2 = 0.0; /*nastawa hamulca zespolonego - kapturek dla FV4a*/
|
||||||
int LocalBrakePos = 0; /*nastawa hamulca indywidualnego*/
|
|
||||||
int ManualBrakePos = 0; /*nastawa hamulca recznego*/
|
int ManualBrakePos = 0; /*nastawa hamulca recznego*/
|
||||||
double LocalBrakePosA = 0.0;
|
double LocalBrakePosA = 0.0;
|
||||||
/*
|
/*
|
||||||
@@ -1250,7 +1249,7 @@ public:
|
|||||||
|
|
||||||
bool AddPulseForce(int Multipler);/*dla drezyny*/
|
bool AddPulseForce(int Multipler);/*dla drezyny*/
|
||||||
|
|
||||||
bool Sandbox( bool const State, int const Notify = range::consist );/*wlacza/wylacza sypanie piasku*/
|
bool Sandbox( bool const State, range_t const Notify = range_t::consist );/*wlacza/wylacza sypanie piasku*/
|
||||||
|
|
||||||
/*! zbijanie czuwaka/SHP*/
|
/*! zbijanie czuwaka/SHP*/
|
||||||
void SSReset(void);
|
void SSReset(void);
|
||||||
@@ -1263,11 +1262,9 @@ public:
|
|||||||
/*! stopnie hamowania - hamulec zasadniczy*/
|
/*! stopnie hamowania - hamulec zasadniczy*/
|
||||||
bool IncBrakeLevelOld(void);
|
bool IncBrakeLevelOld(void);
|
||||||
bool DecBrakeLevelOld(void);
|
bool DecBrakeLevelOld(void);
|
||||||
bool IncLocalBrakeLevel(int CtrlSpeed);
|
bool IncLocalBrakeLevel(float const CtrlSpeed);
|
||||||
bool DecLocalBrakeLevel(int CtrlSpeed);
|
bool DecLocalBrakeLevel(float const CtrlSpeed);
|
||||||
/*! ABu 010205: - skrajne polozenia ham. pomocniczego*/
|
/*! ABu 010205: - skrajne polozenia ham. pomocniczego*/
|
||||||
bool IncLocalBrakeLevelFAST(void);
|
|
||||||
bool DecLocalBrakeLevelFAST(void);
|
|
||||||
bool IncManualBrakeLevel(int CtrlSpeed);
|
bool IncManualBrakeLevel(int CtrlSpeed);
|
||||||
bool DecManualBrakeLevel(int CtrlSpeed);
|
bool DecManualBrakeLevel(int CtrlSpeed);
|
||||||
bool DynamicBrakeSwitch(bool Switch);
|
bool DynamicBrakeSwitch(bool Switch);
|
||||||
@@ -1309,16 +1306,16 @@ public:
|
|||||||
|
|
||||||
/*--funkcje dla lokomotyw*/
|
/*--funkcje dla lokomotyw*/
|
||||||
bool DirectionBackward(void);/*! kierunek ruchu*/
|
bool DirectionBackward(void);/*! kierunek ruchu*/
|
||||||
bool WaterPumpBreakerSwitch( bool State, int const Notify = range::consist ); // water pump breaker state toggle
|
bool WaterPumpBreakerSwitch( bool State, range_t const Notify = range_t::consist ); // water pump breaker state toggle
|
||||||
bool WaterPumpSwitch( bool State, int const Notify = range::consist ); // water pump state toggle
|
bool WaterPumpSwitch( bool State, range_t const Notify = range_t::consist ); // water pump state toggle
|
||||||
bool WaterHeaterBreakerSwitch( bool State, int const Notify = range::consist ); // water heater breaker state toggle
|
bool WaterHeaterBreakerSwitch( bool State, range_t const Notify = range_t::consist ); // water heater breaker state toggle
|
||||||
bool WaterHeaterSwitch( bool State, int const Notify = range::consist ); // water heater state toggle
|
bool WaterHeaterSwitch( bool State, range_t const Notify = range_t::consist ); // water heater state toggle
|
||||||
bool WaterCircuitsLinkSwitch( bool State, int const Notify = range::consist ); // water circuits link state toggle
|
bool WaterCircuitsLinkSwitch( bool State, range_t const Notify = range_t::consist ); // water circuits link state toggle
|
||||||
bool FuelPumpSwitch( bool State, int const Notify = range::consist ); // fuel pump state toggle
|
bool FuelPumpSwitch( bool State, range_t const Notify = range_t::consist ); // fuel pump state toggle
|
||||||
bool OilPumpSwitch( bool State, int const Notify = range::consist ); // oil pump state toggle
|
bool OilPumpSwitch( bool State, range_t const Notify = range_t::consist ); // oil pump state toggle
|
||||||
bool MainSwitch( bool const State, int const Notify = range::consist );/*! wylacznik glowny*/
|
bool MainSwitch( bool const State, range_t const Notify = range_t::consist );/*! wylacznik glowny*/
|
||||||
bool ConverterSwitch( bool State, int const Notify = range::consist );/*! wl/wyl przetwornicy*/
|
bool ConverterSwitch( bool State, range_t const Notify = range_t::consist );/*! wl/wyl przetwornicy*/
|
||||||
bool CompressorSwitch( bool State, int const Notify = range::consist );/*! wl/wyl sprezarki*/
|
bool CompressorSwitch( bool State, range_t const Notify = range_t::consist );/*! wl/wyl sprezarki*/
|
||||||
|
|
||||||
/*-funkcje typowe dla lokomotywy elektrycznej*/
|
/*-funkcje typowe dla lokomotywy elektrycznej*/
|
||||||
void ConverterCheck( double const Timestep ); // przetwornica
|
void ConverterCheck( double const Timestep ); // przetwornica
|
||||||
@@ -1348,8 +1345,8 @@ public:
|
|||||||
bool AutoRelayCheck(void);//symulacja automatycznego rozruchu
|
bool AutoRelayCheck(void);//symulacja automatycznego rozruchu
|
||||||
|
|
||||||
bool ResistorsFlagCheck(void); //sprawdzenie kontrolki oporow rozruchowych NBMX
|
bool ResistorsFlagCheck(void); //sprawdzenie kontrolki oporow rozruchowych NBMX
|
||||||
bool PantFront( bool const State, int const Notify = range::consist ); //obsluga pantografou przedniego
|
bool PantFront( bool const State, range_t const Notify = range_t::consist ); //obsluga pantografou przedniego
|
||||||
bool PantRear( bool const State, int const Notify = range::consist ); //obsluga pantografu tylnego
|
bool PantRear( bool const State, range_t const Notify = range_t::consist ); //obsluga pantografu tylnego
|
||||||
|
|
||||||
/*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/
|
/*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/
|
||||||
bool dizel_EngageSwitch(double state);
|
bool dizel_EngageSwitch(double state);
|
||||||
@@ -1364,10 +1361,10 @@ public:
|
|||||||
|
|
||||||
/* funckje dla wagonow*/
|
/* funckje dla wagonow*/
|
||||||
bool LoadingDone(double LSpeed, std::string LoadInit);
|
bool LoadingDone(double LSpeed, std::string LoadInit);
|
||||||
bool DoorLeft(bool State, int const Notify = range::consist ); //obsluga drzwi lewych
|
bool DoorLeft(bool State, range_t const Notify = range_t::consist ); //obsluga drzwi lewych
|
||||||
bool DoorRight(bool State, int const Notify = range::consist ); //obsluga drzwi prawych
|
bool DoorRight(bool State, range_t const Notify = range_t::consist ); //obsluga drzwi prawych
|
||||||
bool DoorBlockedFlag(void); //sprawdzenie blokady drzwi
|
bool DoorBlockedFlag(void); //sprawdzenie blokady drzwi
|
||||||
bool signal_departure( bool const State, int const Notify = range::consist ); // toggles departure warning
|
bool signal_departure( bool const State, range_t const Notify = range_t::consist ); // toggles departure warning
|
||||||
void update_autonomous_doors( double const Deltatime ); // automatic door controller update
|
void update_autonomous_doors( double const Deltatime ); // automatic door controller update
|
||||||
|
|
||||||
/* funkcje dla samochodow*/
|
/* funkcje dla samochodow*/
|
||||||
@@ -1403,7 +1400,7 @@ private:
|
|||||||
void LoadFIZ_PowerParamsDecode( TPowerParameters &Powerparameters, std::string const Prefix, std::string const &Input );
|
void LoadFIZ_PowerParamsDecode( TPowerParameters &Powerparameters, std::string const Prefix, std::string const &Input );
|
||||||
TPowerType LoadFIZ_PowerDecode( std::string const &Power );
|
TPowerType LoadFIZ_PowerDecode( std::string const &Power );
|
||||||
TPowerSource LoadFIZ_SourceDecode( std::string const &Source );
|
TPowerSource LoadFIZ_SourceDecode( std::string const &Source );
|
||||||
TEngineTypes LoadFIZ_EngineDecode( std::string const &Engine );
|
TEngineType LoadFIZ_EngineDecode( std::string const &Engine );
|
||||||
bool readMPT0( std::string const &line );
|
bool readMPT0( std::string const &line );
|
||||||
bool readMPT( std::string const &line ); //Q 20160717
|
bool readMPT( std::string const &line ); //Q 20160717
|
||||||
bool readMPTElectricSeries( std::string const &line );
|
bool readMPTElectricSeries( std::string const &line );
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
20
MemCell.cpp
20
MemCell.cpp
@@ -51,37 +51,37 @@ TCommandType TMemCell::CommandCheck()
|
|||||||
{ // rozpoznanie komendy
|
{ // rozpoznanie komendy
|
||||||
if( szText == "SetVelocity" ) // najpopularniejsze
|
if( szText == "SetVelocity" ) // najpopularniejsze
|
||||||
{
|
{
|
||||||
eCommand = cm_SetVelocity;
|
eCommand = TCommandType::cm_SetVelocity;
|
||||||
bCommand = false; // ta komenda nie jest wysyłana
|
bCommand = false; // ta komenda nie jest wysyłana
|
||||||
}
|
}
|
||||||
else if( szText == "ShuntVelocity" ) // w tarczach manewrowych
|
else if( szText == "ShuntVelocity" ) // w tarczach manewrowych
|
||||||
{
|
{
|
||||||
eCommand = cm_ShuntVelocity;
|
eCommand = TCommandType::cm_ShuntVelocity;
|
||||||
bCommand = false; // ta komenda nie jest wysyłana
|
bCommand = false; // ta komenda nie jest wysyłana
|
||||||
}
|
}
|
||||||
else if( szText == "Change_direction" ) // zdarza się
|
else if( szText == "Change_direction" ) // zdarza się
|
||||||
{
|
{
|
||||||
eCommand = cm_ChangeDirection;
|
eCommand = TCommandType::cm_ChangeDirection;
|
||||||
bCommand = true; // do wysłania
|
bCommand = true; // do wysłania
|
||||||
}
|
}
|
||||||
else if( szText == "OutsideStation" ) // zdarza się
|
else if( szText == "OutsideStation" ) // zdarza się
|
||||||
{
|
{
|
||||||
eCommand = cm_OutsideStation;
|
eCommand = TCommandType::cm_OutsideStation;
|
||||||
bCommand = false; // tego nie powinno być w komórce
|
bCommand = false; // tego nie powinno być w komórce
|
||||||
}
|
}
|
||||||
else if( szText.compare( 0, 19, "PassengerStopPoint:" ) == 0 ) // porównanie początków
|
else if( szText.compare( 0, 19, "PassengerStopPoint:" ) == 0 ) // porównanie początków
|
||||||
{
|
{
|
||||||
eCommand = cm_PassengerStopPoint;
|
eCommand = TCommandType::cm_PassengerStopPoint;
|
||||||
bCommand = false; // tego nie powinno być w komórce
|
bCommand = false; // tego nie powinno być w komórce
|
||||||
}
|
}
|
||||||
else if( szText == "SetProximityVelocity" ) // nie powinno tego być
|
else if( szText == "SetProximityVelocity" ) // nie powinno tego być
|
||||||
{
|
{
|
||||||
eCommand = cm_SetProximityVelocity;
|
eCommand = TCommandType::cm_SetProximityVelocity;
|
||||||
bCommand = false; // ta komenda nie jest wysyłana
|
bCommand = false; // ta komenda nie jest wysyłana
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
eCommand = cm_Unknown; // ciąg nierozpoznany (nie jest komendą)
|
eCommand = TCommandType::cm_Unknown; // ciąg nierozpoznany (nie jest komendą)
|
||||||
bCommand = true; // do wysłania
|
bCommand = true; // do wysłania
|
||||||
}
|
}
|
||||||
return eCommand;
|
return eCommand;
|
||||||
@@ -141,11 +141,11 @@ bool TMemCell::Compare( std::string const &szTestText, double const fTestValue1,
|
|||||||
|
|
||||||
bool TMemCell::IsVelocity() const
|
bool TMemCell::IsVelocity() const
|
||||||
{ // sprawdzenie, czy event odczytu tej komórki ma być do skanowania, czy do kolejkowania
|
{ // sprawdzenie, czy event odczytu tej komórki ma być do skanowania, czy do kolejkowania
|
||||||
if (eCommand == cm_SetVelocity)
|
if (eCommand == TCommandType::cm_SetVelocity)
|
||||||
return true;
|
return true;
|
||||||
if (eCommand == cm_ShuntVelocity)
|
if (eCommand == TCommandType::cm_ShuntVelocity)
|
||||||
return true;
|
return true;
|
||||||
return (eCommand == cm_SetProximityVelocity);
|
return (eCommand == TCommandType::cm_SetProximityVelocity);
|
||||||
};
|
};
|
||||||
|
|
||||||
void TMemCell::StopCommandSent()
|
void TMemCell::StopCommandSent()
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ private:
|
|||||||
double fValue1 { 0.0 };
|
double fValue1 { 0.0 };
|
||||||
double fValue2 { 0.0 };
|
double fValue2 { 0.0 };
|
||||||
// other
|
// other
|
||||||
TCommandType eCommand { cm_Unknown };
|
TCommandType eCommand { TCommandType::cm_Unknown };
|
||||||
bool bCommand { false }; // czy zawiera komendę dla zatrzymanego AI
|
bool bCommand { false }; // czy zawiera komendę dla zatrzymanego AI
|
||||||
TEvent *OnSent { nullptr }; // event dodawany do kolejki po wysłaniu komendy zatrzymującej skład
|
TEvent *OnSent { nullptr }; // event dodawany do kolejki po wysłaniu komendy zatrzymującej skład
|
||||||
};
|
};
|
||||||
|
|||||||
119
Model3d.cpp
119
Model3d.cpp
@@ -107,22 +107,6 @@ int TSubModel::SeekFaceNormal(std::vector<unsigned int> const &Masks, int const
|
|||||||
float emm1[] = { 1, 1, 1, 0 };
|
float emm1[] = { 1, 1, 1, 0 };
|
||||||
float emm2[] = { 0, 0, 0, 1 };
|
float emm2[] = { 0, 0, 0, 1 };
|
||||||
|
|
||||||
inline double readIntAsDouble(cParser &parser, int base = 255)
|
|
||||||
{
|
|
||||||
int value = parser.getToken<int>(false);
|
|
||||||
return (static_cast<double>(value) / base);
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename ColorT> inline void readColor(cParser &parser, ColorT *color)
|
|
||||||
{
|
|
||||||
double discard;
|
|
||||||
parser.getTokens(4, false);
|
|
||||||
parser >> discard >> color[0] >> color[1] >> color[2];
|
|
||||||
color[ 0 ] /= 255.0;
|
|
||||||
color[ 1 ] /= 255.0;
|
|
||||||
color[ 2 ] /= 255.0;
|
|
||||||
};
|
|
||||||
|
|
||||||
inline void readColor(cParser &parser, glm::vec4 &color)
|
inline void readColor(cParser &parser, glm::vec4 &color)
|
||||||
{
|
{
|
||||||
int discard;
|
int discard;
|
||||||
@@ -192,41 +176,41 @@ int TSubModel::Load( cParser &parser, TModel3d *Model, /*int Pos,*/ bool dynamic
|
|||||||
{
|
{
|
||||||
iFlags |= 0x4000; // jak animacja, to trzeba przechowywać macierz zawsze
|
iFlags |= 0x4000; // jak animacja, to trzeba przechowywać macierz zawsze
|
||||||
if (type == "seconds_jump")
|
if (type == "seconds_jump")
|
||||||
b_Anim = b_aAnim = at_SecondsJump; // sekundy z przeskokiem
|
b_Anim = b_aAnim = TAnimType::at_SecondsJump; // sekundy z przeskokiem
|
||||||
else if (type == "minutes_jump")
|
else if (type == "minutes_jump")
|
||||||
b_Anim = b_aAnim = at_MinutesJump; // minuty z przeskokiem
|
b_Anim = b_aAnim = TAnimType::at_MinutesJump; // minuty z przeskokiem
|
||||||
else if (type == "hours_jump")
|
else if (type == "hours_jump")
|
||||||
b_Anim = b_aAnim = at_HoursJump; // godziny z przeskokiem
|
b_Anim = b_aAnim = TAnimType::at_HoursJump; // godziny z przeskokiem
|
||||||
else if (type == "hours24_jump")
|
else if (type == "hours24_jump")
|
||||||
b_Anim = b_aAnim = at_Hours24Jump; // godziny z przeskokiem
|
b_Anim = b_aAnim = TAnimType::at_Hours24Jump; // godziny z przeskokiem
|
||||||
else if (type == "seconds")
|
else if (type == "seconds")
|
||||||
b_Anim = b_aAnim = at_Seconds; // minuty płynnie
|
b_Anim = b_aAnim = TAnimType::at_Seconds; // minuty płynnie
|
||||||
else if (type == "minutes")
|
else if (type == "minutes")
|
||||||
b_Anim = b_aAnim = at_Minutes; // minuty płynnie
|
b_Anim = b_aAnim = TAnimType::at_Minutes; // minuty płynnie
|
||||||
else if (type == "hours")
|
else if (type == "hours")
|
||||||
b_Anim = b_aAnim = at_Hours; // godziny płynnie
|
b_Anim = b_aAnim = TAnimType::at_Hours; // godziny płynnie
|
||||||
else if (type == "hours24")
|
else if (type == "hours24")
|
||||||
b_Anim = b_aAnim = at_Hours24; // godziny płynnie
|
b_Anim = b_aAnim = TAnimType::at_Hours24; // godziny płynnie
|
||||||
else if (type == "billboard")
|
else if (type == "billboard")
|
||||||
b_Anim = b_aAnim = at_Billboard; // obrót w pionie do kamery
|
b_Anim = b_aAnim = TAnimType::at_Billboard; // obrót w pionie do kamery
|
||||||
else if (type == "wind")
|
else if (type == "wind")
|
||||||
b_Anim = b_aAnim = at_Wind; // ruch pod wpływem wiatru
|
b_Anim = b_aAnim = TAnimType::at_Wind; // ruch pod wpływem wiatru
|
||||||
else if (type == "sky")
|
else if (type == "sky")
|
||||||
b_Anim = b_aAnim = at_Sky; // aniamacja nieba
|
b_Anim = b_aAnim = TAnimType::at_Sky; // aniamacja nieba
|
||||||
else if (type == "ik")
|
else if (type == "ik")
|
||||||
b_Anim = b_aAnim = at_IK; // IK: zadający
|
b_Anim = b_aAnim = TAnimType::at_IK; // IK: zadający
|
||||||
else if (type == "ik11")
|
else if (type == "ik11")
|
||||||
b_Anim = b_aAnim = at_IK11; // IK: kierunkowany
|
b_Anim = b_aAnim = TAnimType::at_IK11; // IK: kierunkowany
|
||||||
else if (type == "ik21")
|
else if (type == "ik21")
|
||||||
b_Anim = b_aAnim = at_IK21; // IK: kierunkowany
|
b_Anim = b_aAnim = TAnimType::at_IK21; // IK: kierunkowany
|
||||||
else if (type == "ik22")
|
else if (type == "ik22")
|
||||||
b_Anim = b_aAnim = at_IK22; // IK: kierunkowany
|
b_Anim = b_aAnim = TAnimType::at_IK22; // IK: kierunkowany
|
||||||
else if (type == "digital")
|
else if (type == "digital")
|
||||||
b_Anim = b_aAnim = at_Digital; // licznik mechaniczny
|
b_Anim = b_aAnim = TAnimType::at_Digital; // licznik mechaniczny
|
||||||
else if (type == "digiclk")
|
else if (type == "digiclk")
|
||||||
b_Anim = b_aAnim = at_DigiClk; // zegar cyfrowy
|
b_Anim = b_aAnim = TAnimType::at_DigiClk; // zegar cyfrowy
|
||||||
else
|
else
|
||||||
b_Anim = b_aAnim = at_Undefined; // nieznana forma animacji
|
b_Anim = b_aAnim = TAnimType::at_Undefined; // nieznana forma animacji
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (eType < TP_ROTATOR)
|
if (eType < TP_ROTATOR)
|
||||||
@@ -281,19 +265,16 @@ int TSubModel::Load( cParser &parser, TModel3d *Model, /*int Pos,*/ bool dynamic
|
|||||||
else if (eType < TP_ROTATOR)
|
else if (eType < TP_ROTATOR)
|
||||||
{
|
{
|
||||||
std::string discard;
|
std::string discard;
|
||||||
parser.getTokens(5, false);
|
parser.getTokens(6, false);
|
||||||
parser
|
parser
|
||||||
>> discard >> bWire
|
>> discard >> bWire
|
||||||
>> discard >> fWireSize
|
>> discard >> fWireSize
|
||||||
>> discard;
|
>> discard >> Opacity;
|
||||||
// wymagane jest 0 dla szyb, 100 idzie w nieprzezroczyste
|
// wymagane jest 0 dla szyb, 100 idzie w nieprzezroczyste
|
||||||
Opacity = readIntAsDouble(parser, 100.0f);
|
if( Opacity > 1.f ) {
|
||||||
if (Opacity > 1.0f)
|
Opacity = std::min( 1.f, Opacity * 0.01f );
|
||||||
Opacity *= 0.01f; // w 2013 był błąd i aby go obejść, trzeba było wpisać 10000.0
|
}
|
||||||
/*
|
|
||||||
if ((Global.iConvertModels & 1) == 0) // dla zgodności wstecz
|
|
||||||
Opacity = 0.0; // wszystko idzie w przezroczyste albo zależnie od tekstury
|
|
||||||
*/
|
|
||||||
if (!parser.expectToken("map:"))
|
if (!parser.expectToken("map:"))
|
||||||
Error("Model map parse failure!");
|
Error("Model map parse failure!");
|
||||||
std::string material = parser.getToken<std::string>();
|
std::string material = parser.getToken<std::string>();
|
||||||
@@ -793,8 +774,8 @@ void TSubModel::SetRotate(float3 vNewRotateAxis, float fNewAngle)
|
|||||||
f_Angle = fNewAngle;
|
f_Angle = fNewAngle;
|
||||||
if (fNewAngle != 0.0)
|
if (fNewAngle != 0.0)
|
||||||
{
|
{
|
||||||
b_Anim = at_Rotate;
|
b_Anim = TAnimType::at_Rotate;
|
||||||
b_aAnim = at_Rotate;
|
b_aAnim = TAnimType::at_Rotate;
|
||||||
}
|
}
|
||||||
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
||||||
}
|
}
|
||||||
@@ -804,8 +785,8 @@ void TSubModel::SetRotateXYZ(float3 vNewAngles)
|
|||||||
// podane kąty wokół osi
|
// podane kąty wokół osi
|
||||||
// lokalnego układu
|
// lokalnego układu
|
||||||
v_Angles = vNewAngles;
|
v_Angles = vNewAngles;
|
||||||
b_Anim = at_RotateXYZ;
|
b_Anim = TAnimType::at_RotateXYZ;
|
||||||
b_aAnim = at_RotateXYZ;
|
b_aAnim = TAnimType::at_RotateXYZ;
|
||||||
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -816,16 +797,16 @@ void TSubModel::SetRotateXYZ( Math3D::vector3 vNewAngles)
|
|||||||
v_Angles.x = vNewAngles.x;
|
v_Angles.x = vNewAngles.x;
|
||||||
v_Angles.y = vNewAngles.y;
|
v_Angles.y = vNewAngles.y;
|
||||||
v_Angles.z = vNewAngles.z;
|
v_Angles.z = vNewAngles.z;
|
||||||
b_Anim = at_RotateXYZ;
|
b_Anim = TAnimType::at_RotateXYZ;
|
||||||
b_aAnim = at_RotateXYZ;
|
b_aAnim = TAnimType::at_RotateXYZ;
|
||||||
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
||||||
}
|
}
|
||||||
|
|
||||||
void TSubModel::SetTranslate(float3 vNewTransVector)
|
void TSubModel::SetTranslate(float3 vNewTransVector)
|
||||||
{ // przesunięcie submodelu (np. w kabinie)
|
{ // przesunięcie submodelu (np. w kabinie)
|
||||||
v_TransVector = vNewTransVector;
|
v_TransVector = vNewTransVector;
|
||||||
b_Anim = at_Translate;
|
b_Anim = TAnimType::at_Translate;
|
||||||
b_aAnim = at_Translate;
|
b_aAnim = TAnimType::at_Translate;
|
||||||
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -834,8 +815,8 @@ void TSubModel::SetTranslate( Math3D::vector3 vNewTransVector)
|
|||||||
v_TransVector.x = vNewTransVector.x;
|
v_TransVector.x = vNewTransVector.x;
|
||||||
v_TransVector.y = vNewTransVector.y;
|
v_TransVector.y = vNewTransVector.y;
|
||||||
v_TransVector.z = vNewTransVector.z;
|
v_TransVector.z = vNewTransVector.z;
|
||||||
b_Anim = at_Translate;
|
b_Anim = TAnimType::at_Translate;
|
||||||
b_aAnim = at_Translate;
|
b_aAnim = TAnimType::at_Translate;
|
||||||
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
iAnimOwner = iInstance; // zapamiętanie czyja jest animacja
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -891,17 +872,17 @@ void TSubModel::RaAnimation(TAnimType a)
|
|||||||
{ // wykonanie animacji niezależnie od renderowania
|
{ // wykonanie animacji niezależnie od renderowania
|
||||||
switch (a)
|
switch (a)
|
||||||
{ // korekcja położenia, jeśli submodel jest animowany
|
{ // korekcja położenia, jeśli submodel jest animowany
|
||||||
case at_Translate: // Ra: było "true"
|
case TAnimType::at_Translate: // Ra: było "true"
|
||||||
if (iAnimOwner != iInstance)
|
if (iAnimOwner != iInstance)
|
||||||
break; // cudza animacja
|
break; // cudza animacja
|
||||||
glTranslatef(v_TransVector.x, v_TransVector.y, v_TransVector.z);
|
glTranslatef(v_TransVector.x, v_TransVector.y, v_TransVector.z);
|
||||||
break;
|
break;
|
||||||
case at_Rotate: // Ra: było "true"
|
case TAnimType::at_Rotate: // Ra: było "true"
|
||||||
if (iAnimOwner != iInstance)
|
if (iAnimOwner != iInstance)
|
||||||
break; // cudza animacja
|
break; // cudza animacja
|
||||||
glRotatef(f_Angle, v_RotateAxis.x, v_RotateAxis.y, v_RotateAxis.z);
|
glRotatef(f_Angle, v_RotateAxis.x, v_RotateAxis.y, v_RotateAxis.z);
|
||||||
break;
|
break;
|
||||||
case at_RotateXYZ:
|
case TAnimType::at_RotateXYZ:
|
||||||
if (iAnimOwner != iInstance)
|
if (iAnimOwner != iInstance)
|
||||||
break; // cudza animacja
|
break; // cudza animacja
|
||||||
glTranslatef(v_TransVector.x, v_TransVector.y, v_TransVector.z);
|
glTranslatef(v_TransVector.x, v_TransVector.y, v_TransVector.z);
|
||||||
@@ -909,31 +890,31 @@ void TSubModel::RaAnimation(TAnimType a)
|
|||||||
glRotatef(v_Angles.y, 0.0f, 1.0f, 0.0f);
|
glRotatef(v_Angles.y, 0.0f, 1.0f, 0.0f);
|
||||||
glRotatef(v_Angles.z, 0.0f, 0.0f, 1.0f);
|
glRotatef(v_Angles.z, 0.0f, 0.0f, 1.0f);
|
||||||
break;
|
break;
|
||||||
case at_SecondsJump: // sekundy z przeskokiem
|
case TAnimType::at_SecondsJump: // sekundy z przeskokiem
|
||||||
glRotatef(simulation::Time.data().wSecond * 6.0, 0.0, 1.0, 0.0);
|
glRotatef(simulation::Time.data().wSecond * 6.0, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_MinutesJump: // minuty z przeskokiem
|
case TAnimType::at_MinutesJump: // minuty z przeskokiem
|
||||||
glRotatef(simulation::Time.data().wMinute * 6.0, 0.0, 1.0, 0.0);
|
glRotatef(simulation::Time.data().wMinute * 6.0, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_HoursJump: // godziny skokowo 12h/360°
|
case TAnimType::at_HoursJump: // godziny skokowo 12h/360°
|
||||||
glRotatef(simulation::Time.data().wHour * 30.0 * 0.5, 0.0, 1.0, 0.0);
|
glRotatef(simulation::Time.data().wHour * 30.0 * 0.5, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_Hours24Jump: // godziny skokowo 24h/360°
|
case TAnimType::at_Hours24Jump: // godziny skokowo 24h/360°
|
||||||
glRotatef(simulation::Time.data().wHour * 15.0 * 0.25, 0.0, 1.0, 0.0);
|
glRotatef(simulation::Time.data().wHour * 15.0 * 0.25, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_Seconds: // sekundy płynnie
|
case TAnimType::at_Seconds: // sekundy płynnie
|
||||||
glRotatef(simulation::Time.second() * 6.0, 0.0, 1.0, 0.0);
|
glRotatef(simulation::Time.second() * 6.0, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_Minutes: // minuty płynnie
|
case TAnimType::at_Minutes: // minuty płynnie
|
||||||
glRotatef(simulation::Time.data().wMinute * 6.0 + simulation::Time.second() * 0.1, 0.0, 1.0, 0.0);
|
glRotatef(simulation::Time.data().wMinute * 6.0 + simulation::Time.second() * 0.1, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_Hours: // godziny płynnie 12h/360°
|
case TAnimType::at_Hours: // godziny płynnie 12h/360°
|
||||||
glRotatef(2.0 * Global.fTimeAngleDeg, 0.0, 1.0, 0.0);
|
glRotatef(2.0 * Global.fTimeAngleDeg, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_Hours24: // godziny płynnie 24h/360°
|
case TAnimType::at_Hours24: // godziny płynnie 24h/360°
|
||||||
glRotatef(Global.fTimeAngleDeg, 0.0, 1.0, 0.0);
|
glRotatef(Global.fTimeAngleDeg, 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_Billboard: // obrót w pionie do kamery
|
case TAnimType::at_Billboard: // obrót w pionie do kamery
|
||||||
{
|
{
|
||||||
Math3D::matrix4x4 mat; mat.OpenGL_Matrix( OpenGLMatrices.data_array( GL_MODELVIEW ) );
|
Math3D::matrix4x4 mat; mat.OpenGL_Matrix( OpenGLMatrices.data_array( GL_MODELVIEW ) );
|
||||||
float3 gdzie = float3(mat[3][0], mat[3][1], mat[3][2]); // początek układu współrzędnych submodelu względem kamery
|
float3 gdzie = float3(mat[3][0], mat[3][1], mat[3][2]); // początek układu współrzędnych submodelu względem kamery
|
||||||
@@ -944,19 +925,19 @@ void TSubModel::RaAnimation(TAnimType a)
|
|||||||
0.0); // jedynie obracamy w pionie o kąt
|
0.0); // jedynie obracamy w pionie o kąt
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case at_Wind: // ruch pod wpływem wiatru (wiatr będziemy liczyć potem...)
|
case TAnimType::at_Wind: // ruch pod wpływem wiatru (wiatr będziemy liczyć potem...)
|
||||||
glRotated(1.5 * std::sin(M_PI * simulation::Time.second() / 6.0), 0.0, 1.0, 0.0);
|
glRotated(1.5 * std::sin(M_PI * simulation::Time.second() / 6.0), 0.0, 1.0, 0.0);
|
||||||
break;
|
break;
|
||||||
case at_Sky: // animacja nieba
|
case TAnimType::at_Sky: // animacja nieba
|
||||||
glRotated(Global.fLatitudeDeg, 1.0, 0.0, 0.0); // ustawienie osi OY na północ
|
glRotated(Global.fLatitudeDeg, 1.0, 0.0, 0.0); // ustawienie osi OY na północ
|
||||||
// glRotatef(Global.fTimeAngleDeg,0.0,1.0,0.0); //obrót dobowy osi OX
|
// glRotatef(Global.fTimeAngleDeg,0.0,1.0,0.0); //obrót dobowy osi OX
|
||||||
glRotated(-fmod(Global.fTimeAngleDeg, 360.0), 0.0, 1.0, 0.0); // obrót dobowy osi OX
|
glRotated(-fmod(Global.fTimeAngleDeg, 360.0), 0.0, 1.0, 0.0); // obrót dobowy osi OX
|
||||||
break;
|
break;
|
||||||
case at_IK11: // ostatni element animacji szkieletowej (podudzie, stopa)
|
case TAnimType::at_IK11: // ostatni element animacji szkieletowej (podudzie, stopa)
|
||||||
glRotatef(v_Angles.z, 0.0f, 1.0f, 0.0f); // obrót względem osi pionowej (azymut)
|
glRotatef(v_Angles.z, 0.0f, 1.0f, 0.0f); // obrót względem osi pionowej (azymut)
|
||||||
glRotatef(v_Angles.x, 1.0f, 0.0f, 0.0f); // obrót względem poziomu (deklinacja)
|
glRotatef(v_Angles.x, 1.0f, 0.0f, 0.0f); // obrót względem poziomu (deklinacja)
|
||||||
break;
|
break;
|
||||||
case at_DigiClk: // animacja zegara cyfrowego
|
case TAnimType::at_DigiClk: // animacja zegara cyfrowego
|
||||||
{ // ustawienie animacji w submodelach potomnych
|
{ // ustawienie animacji w submodelach potomnych
|
||||||
TSubModel *sm = ChildGet();
|
TSubModel *sm = ChildGet();
|
||||||
do
|
do
|
||||||
|
|||||||
20
Model3d.h
20
Model3d.h
@@ -21,7 +21,7 @@ const int TP_FREESPOTLIGHT = 257;
|
|||||||
const int TP_STARS = 258;
|
const int TP_STARS = 258;
|
||||||
const int TP_TEXT = 259;
|
const int TP_TEXT = 259;
|
||||||
|
|
||||||
enum TAnimType // rodzaj animacji
|
enum class TAnimType // rodzaj animacji
|
||||||
{
|
{
|
||||||
at_None, // brak
|
at_None, // brak
|
||||||
at_Rotate, // obrót względem wektora o kąt
|
at_Rotate, // obrót względem wektora o kąt
|
||||||
@@ -38,13 +38,13 @@ enum TAnimType // rodzaj animacji
|
|||||||
at_Billboard, // obrót w pionie do kamery
|
at_Billboard, // obrót w pionie do kamery
|
||||||
at_Wind, // ruch pod wpływem wiatru
|
at_Wind, // ruch pod wpływem wiatru
|
||||||
at_Sky, // animacja nieba
|
at_Sky, // animacja nieba
|
||||||
at_IK = 0x100, // odwrotna kinematyka - submodel sterujący (np. staw skokowy)
|
at_IK, // odwrotna kinematyka - submodel sterujący (np. staw skokowy)
|
||||||
at_IK11 = 0x101, // odwrotna kinematyka - submodel nadrzędny do sterowango (np. stopa)
|
at_IK11, // odwrotna kinematyka - submodel nadrzędny do sterowango (np. stopa)
|
||||||
at_IK21 = 0x102, // odwrotna kinematyka - submodel nadrzędny do sterowango (np. podudzie)
|
at_IK21, // odwrotna kinematyka - submodel nadrzędny do sterowango (np. podudzie)
|
||||||
at_IK22 = 0x103, // odwrotna kinematyka - submodel nadrzędny do nadrzędnego sterowango (np. udo)
|
at_IK22, // odwrotna kinematyka - submodel nadrzędny do nadrzędnego sterowango (np. udo)
|
||||||
at_Digital = 0x200, // dziesięciocyfrowy licznik mechaniczny (z cylindrami)
|
at_Digital, // dziesięciocyfrowy licznik mechaniczny (z cylindrami)
|
||||||
at_DigiClk = 0x201, // zegar cyfrowy jako licznik na dziesięciościanach
|
at_DigiClk, // zegar cyfrowy jako licznik na dziesięciościanach
|
||||||
at_Undefined = 0x800000FF // animacja chwilowo nieokreślona
|
at_Undefined // animacja chwilowo nieokreślona
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace scene {
|
namespace scene {
|
||||||
@@ -73,7 +73,7 @@ private:
|
|||||||
int eType{ TP_ROTATOR }; // Ra: modele binarne dają więcej możliwości niż mesh złożony z trójkątów
|
int eType{ TP_ROTATOR }; // Ra: modele binarne dają więcej możliwości niż mesh złożony z trójkątów
|
||||||
int iName{ -1 }; // numer łańcucha z nazwą submodelu, albo -1 gdy anonimowy
|
int iName{ -1 }; // numer łańcucha z nazwą submodelu, albo -1 gdy anonimowy
|
||||||
public: // chwilowo
|
public: // chwilowo
|
||||||
TAnimType b_Anim{ at_None };
|
TAnimType b_Anim{ TAnimType::at_None };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int iFlags{ 0x0200 }; // bit 9=1: submodel został utworzony a nie ustawiony na wczytany plik
|
int iFlags{ 0x0200 }; // bit 9=1: submodel został utworzony a nie ustawiony na wczytany plik
|
||||||
@@ -136,7 +136,7 @@ public: // chwilowo
|
|||||||
gfx::vertex_array Vertices;
|
gfx::vertex_array Vertices;
|
||||||
float m_boundingradius { 0 };
|
float m_boundingradius { 0 };
|
||||||
size_t iAnimOwner{ 0 }; // roboczy numer egzemplarza, który ustawił animację
|
size_t iAnimOwner{ 0 }; // roboczy numer egzemplarza, który ustawił animację
|
||||||
TAnimType b_aAnim{ at_None }; // kody animacji oddzielnie, bo zerowane
|
TAnimType b_aAnim{ TAnimType::at_None }; // kody animacji oddzielnie, bo zerowane
|
||||||
float4x4 *mAnimMatrix{ nullptr }; // macierz do animacji kwaternionowych (należy do AnimContainer)
|
float4x4 *mAnimMatrix{ nullptr }; // macierz do animacji kwaternionowych (należy do AnimContainer)
|
||||||
TSubModel **smLetter{ nullptr }; // wskaźnik na tablicę submdeli do generoania tekstu (docelowo zapisać do E3D)
|
TSubModel **smLetter{ nullptr }; // wskaźnik na tablicę submdeli do generoania tekstu (docelowo zapisać do E3D)
|
||||||
TSubModel *Parent{ nullptr }; // nadrzędny, np. do wymnażania macierzy
|
TSubModel *Parent{ nullptr }; // nadrzędny, np. do wymnażania macierzy
|
||||||
|
|||||||
130
Train.cpp
130
Train.cpp
@@ -600,7 +600,7 @@ bool TTrain::is_eztoer() const {
|
|||||||
|
|
||||||
return
|
return
|
||||||
( ( mvControlled->TrainType == dt_EZT )
|
( ( mvControlled->TrainType == dt_EZT )
|
||||||
&& ( mvOccupied->BrakeSubsystem == ss_ESt )
|
&& ( mvOccupied->BrakeSubsystem == TBrakeSubSystem::ss_ESt )
|
||||||
&& ( mvControlled->Battery == true )
|
&& ( mvControlled->Battery == true )
|
||||||
&& ( mvControlled->EpFuse == true )
|
&& ( mvControlled->EpFuse == true )
|
||||||
&& ( mvControlled->ActiveDir != 0 ) ); // od yB
|
&& ( mvControlled->ActiveDir != 0 ) ); // od yB
|
||||||
@@ -769,7 +769,7 @@ void TTrain::OnCommand_secondcontrollerincrease( TTrain *Train, command_data con
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
// on press or hold
|
// on press or hold
|
||||||
if( ( Train->mvControlled->EngineType == DieselElectric )
|
if( ( Train->mvControlled->EngineType == TEngineType::DieselElectric )
|
||||||
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
||||||
Train->mvControlled->AnPos = clamp(
|
Train->mvControlled->AnPos = clamp(
|
||||||
Train->mvControlled->AnPos + 0.025,
|
Train->mvControlled->AnPos + 0.025,
|
||||||
@@ -785,7 +785,7 @@ void TTrain::OnCommand_secondcontrollerincreasefast( TTrain *Train, command_data
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
// on press or hold
|
// on press or hold
|
||||||
if( ( Train->mvControlled->EngineType == DieselElectric )
|
if( ( Train->mvControlled->EngineType == TEngineType::DieselElectric )
|
||||||
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
||||||
Train->mvControlled->AnPos = 1.0;
|
Train->mvControlled->AnPos = 1.0;
|
||||||
}
|
}
|
||||||
@@ -837,7 +837,7 @@ void TTrain::OnCommand_secondcontrollerdecrease( TTrain *Train, command_data con
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
// on press or hold
|
// on press or hold
|
||||||
if( ( Train->mvControlled->EngineType == DieselElectric )
|
if( ( Train->mvControlled->EngineType == TEngineType::DieselElectric )
|
||||||
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
||||||
Train->mvControlled->AnPos = clamp(
|
Train->mvControlled->AnPos = clamp(
|
||||||
Train->mvControlled->AnPos - 0.025,
|
Train->mvControlled->AnPos - 0.025,
|
||||||
@@ -853,7 +853,7 @@ void TTrain::OnCommand_secondcontrollerdecreasefast( TTrain *Train, command_data
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
// on press or hold
|
// on press or hold
|
||||||
if( ( Train->mvControlled->EngineType == DieselElectric )
|
if( ( Train->mvControlled->EngineType == TEngineType::DieselElectric )
|
||||||
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
&& ( true == Train->mvControlled->ShuntMode ) ) {
|
||||||
Train->mvControlled->AnPos = 0.0;
|
Train->mvControlled->AnPos = 0.0;
|
||||||
}
|
}
|
||||||
@@ -882,7 +882,7 @@ void TTrain::OnCommand_independentbrakeincrease( TTrain *Train, command_data con
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
|
|
||||||
if( Train->mvOccupied->LocalBrake != ManualBrake ) {
|
if( Train->mvOccupied->LocalBrake != TLocalBrake::ManualBrake ) {
|
||||||
Train->mvOccupied->IncLocalBrakeLevel( 1 );
|
Train->mvOccupied->IncLocalBrakeLevel( 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -892,8 +892,8 @@ void TTrain::OnCommand_independentbrakeincreasefast( TTrain *Train, command_data
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
|
|
||||||
if( Train->mvOccupied->LocalBrake != ManualBrake ) {
|
if( Train->mvOccupied->LocalBrake != TLocalBrake::ManualBrake ) {
|
||||||
Train->mvOccupied->IncLocalBrakeLevel( 2 );
|
Train->mvOccupied->IncLocalBrakeLevel( LocalBrakePosNo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -902,10 +902,10 @@ void TTrain::OnCommand_independentbrakedecrease( TTrain *Train, command_data con
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
|
|
||||||
if( ( Train->mvOccupied->LocalBrake != ManualBrake )
|
if( ( Train->mvOccupied->LocalBrake != TLocalBrake::ManualBrake )
|
||||||
// Ra 1014-06: AI potrafi zahamować pomocniczym mimo jego braku - odhamować jakoś trzeba
|
// Ra 1014-06: AI potrafi zahamować pomocniczym mimo jego braku - odhamować jakoś trzeba
|
||||||
// TODO: sort AI out so it doesn't do things it doesn't have equipment for
|
// TODO: sort AI out so it doesn't do things it doesn't have equipment for
|
||||||
|| ( Train->mvOccupied->LocalBrakePos != 0 ) ) {
|
|| ( Train->mvOccupied->LocalBrakePosA > 0 ) ) {
|
||||||
Train->mvOccupied->DecLocalBrakeLevel( 1 );
|
Train->mvOccupied->DecLocalBrakeLevel( 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -915,11 +915,11 @@ void TTrain::OnCommand_independentbrakedecreasefast( TTrain *Train, command_data
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
|
|
||||||
if( ( Train->mvOccupied->LocalBrake != ManualBrake )
|
if( ( Train->mvOccupied->LocalBrake != TLocalBrake::ManualBrake )
|
||||||
// Ra 1014-06: AI potrafi zahamować pomocniczym mimo jego braku - odhamować jakoś trzeba
|
// Ra 1014-06: AI potrafi zahamować pomocniczym mimo jego braku - odhamować jakoś trzeba
|
||||||
// TODO: sort AI out so it doesn't do things it doesn't have equipment for
|
// TODO: sort AI out so it doesn't do things it doesn't have equipment for
|
||||||
|| ( Train->mvOccupied->LocalBrakePos != 0 ) ) {
|
|| ( Train->mvOccupied->LocalBrakePosA > 0 ) ) {
|
||||||
Train->mvOccupied->DecLocalBrakeLevel( 2 );
|
Train->mvOccupied->DecLocalBrakeLevel( LocalBrakePosNo );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -948,9 +948,9 @@ void TTrain::OnCommand_independentbrakebailoff( TTrain *Train, command_data cons
|
|||||||
// TODO: check if this set of conditions can be simplified.
|
// TODO: check if this set of conditions can be simplified.
|
||||||
// it'd be more flexible to have an attribute indicating whether bail off position is supported
|
// it'd be more flexible to have an attribute indicating whether bail off position is supported
|
||||||
if( ( Train->mvControlled->TrainType != dt_EZT )
|
if( ( Train->mvControlled->TrainType != dt_EZT )
|
||||||
&& ( ( Train->mvControlled->EngineType == ElectricSeriesMotor )
|
&& ( ( Train->mvControlled->EngineType == TEngineType::ElectricSeriesMotor )
|
||||||
|| ( Train->mvControlled->EngineType == DieselElectric )
|
|| ( Train->mvControlled->EngineType == TEngineType::DieselElectric )
|
||||||
|| ( Train->mvControlled->EngineType == ElectricInductionMotor ) )
|
|| ( Train->mvControlled->EngineType == TEngineType::ElectricInductionMotor ) )
|
||||||
&& ( Train->mvOccupied->BrakeCtrlPosNo > 0 ) ) {
|
&& ( Train->mvOccupied->BrakeCtrlPosNo > 0 ) ) {
|
||||||
|
|
||||||
if( Command.action == GLFW_PRESS ) {
|
if( Command.action == GLFW_PRESS ) {
|
||||||
@@ -989,7 +989,7 @@ void TTrain::OnCommand_trainbrakeincrease( TTrain *Train, command_data const &Co
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
|
|
||||||
if( Train->mvOccupied->BrakeHandle == FV4a ) {
|
if( Train->mvOccupied->BrakeHandle == TBrakeHandle::FV4a ) {
|
||||||
Train->mvOccupied->BrakeLevelAdd( 0.1 /*15.0 * Command.time_delta*/ );
|
Train->mvOccupied->BrakeLevelAdd( 0.1 /*15.0 * Command.time_delta*/ );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1002,7 +1002,7 @@ void TTrain::OnCommand_trainbrakedecrease( TTrain *Train, command_data const &Co
|
|||||||
|
|
||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
// press or hold
|
// press or hold
|
||||||
if( Train->mvOccupied->BrakeHandle == FV4a ) {
|
if( Train->mvOccupied->BrakeHandle == TBrakeHandle::FV4a ) {
|
||||||
Train->mvOccupied->BrakeLevelAdd( -0.1 /*-15.0 * Command.time_delta*/ );
|
Train->mvOccupied->BrakeLevelAdd( -0.1 /*-15.0 * Command.time_delta*/ );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -1031,7 +1031,7 @@ void TTrain::OnCommand_trainbrakecharging( TTrain *Train, command_data const &Co
|
|||||||
else {
|
else {
|
||||||
// release
|
// release
|
||||||
if( ( Train->mvOccupied->BrakeCtrlPos == -1 )
|
if( ( Train->mvOccupied->BrakeCtrlPos == -1 )
|
||||||
&& ( Train->mvOccupied->BrakeHandle == FVel6 )
|
&& ( Train->mvOccupied->BrakeHandle == TBrakeHandle::FVel6 )
|
||||||
&& ( Train->DynamicObject->Controller != AIdriver )
|
&& ( Train->DynamicObject->Controller != AIdriver )
|
||||||
&& ( Global.iFeedbackMode < 3 ) ) {
|
&& ( Global.iFeedbackMode < 3 ) ) {
|
||||||
// Odskakiwanie hamulce EP
|
// Odskakiwanie hamulce EP
|
||||||
@@ -1062,7 +1062,7 @@ void TTrain::OnCommand_trainbrakeservice( TTrain *Train, command_data const &Com
|
|||||||
|
|
||||||
Train->set_train_brake( (
|
Train->set_train_brake( (
|
||||||
Train->mvOccupied->BrakeCtrlPosNo / 2
|
Train->mvOccupied->BrakeCtrlPosNo / 2
|
||||||
+ ( Train->mvOccupied->BrakeHandle == FV4a ?
|
+ ( Train->mvOccupied->BrakeHandle == TBrakeHandle::FV4a ?
|
||||||
1 :
|
1 :
|
||||||
0 ) ) );
|
0 ) ) );
|
||||||
}
|
}
|
||||||
@@ -1103,7 +1103,7 @@ void TTrain::OnCommand_trainbrakebasepressureincrease( TTrain *Train, command_da
|
|||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
|
|
||||||
switch( Train->mvOccupied->BrakeHandle ) {
|
switch( Train->mvOccupied->BrakeHandle ) {
|
||||||
case FV4a: {
|
case TBrakeHandle::FV4a: {
|
||||||
Train->mvOccupied->BrakeCtrlPos2 = clamp( Train->mvOccupied->BrakeCtrlPos2 - 0.01, -1.5, 2.0 );
|
Train->mvOccupied->BrakeCtrlPos2 = clamp( Train->mvOccupied->BrakeCtrlPos2 - 0.01, -1.5, 2.0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1120,7 +1120,7 @@ void TTrain::OnCommand_trainbrakebasepressuredecrease( TTrain *Train, command_da
|
|||||||
if( Command.action != GLFW_RELEASE ) {
|
if( Command.action != GLFW_RELEASE ) {
|
||||||
|
|
||||||
switch( Train->mvOccupied->BrakeHandle ) {
|
switch( Train->mvOccupied->BrakeHandle ) {
|
||||||
case FV4a: {
|
case TBrakeHandle::FV4a: {
|
||||||
Train->mvOccupied->BrakeCtrlPos2 = clamp( Train->mvOccupied->BrakeCtrlPos2 + 0.01, -1.5, 2.0 );
|
Train->mvOccupied->BrakeCtrlPos2 = clamp( Train->mvOccupied->BrakeCtrlPos2 + 0.01, -1.5, 2.0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1158,7 +1158,7 @@ void TTrain::OnCommand_manualbrakeincrease( TTrain *Train, command_data const &C
|
|||||||
auto *vehicle { Train->find_nearest_consist_vehicle() };
|
auto *vehicle { Train->find_nearest_consist_vehicle() };
|
||||||
if( vehicle == nullptr ) { return; }
|
if( vehicle == nullptr ) { return; }
|
||||||
|
|
||||||
if( ( vehicle->MoverParameters->LocalBrake == ManualBrake )
|
if( ( vehicle->MoverParameters->LocalBrake == TLocalBrake::ManualBrake )
|
||||||
|| ( vehicle->MoverParameters->MBrake == true ) ) {
|
|| ( vehicle->MoverParameters->MBrake == true ) ) {
|
||||||
|
|
||||||
vehicle->MoverParameters->IncManualBrakeLevel( 1 );
|
vehicle->MoverParameters->IncManualBrakeLevel( 1 );
|
||||||
@@ -1173,7 +1173,7 @@ void TTrain::OnCommand_manualbrakedecrease( TTrain *Train, command_data const &C
|
|||||||
auto *vehicle { Train->find_nearest_consist_vehicle() };
|
auto *vehicle { Train->find_nearest_consist_vehicle() };
|
||||||
if( vehicle == nullptr ) { return; }
|
if( vehicle == nullptr ) { return; }
|
||||||
|
|
||||||
if( ( vehicle->MoverParameters->LocalBrake == ManualBrake )
|
if( ( vehicle->MoverParameters->LocalBrake == TLocalBrake::ManualBrake )
|
||||||
|| ( vehicle->MoverParameters->MBrake == true ) ) {
|
|| ( vehicle->MoverParameters->MBrake == true ) ) {
|
||||||
|
|
||||||
vehicle->MoverParameters->DecManualBrakeLevel( 1 );
|
vehicle->MoverParameters->DecManualBrakeLevel( 1 );
|
||||||
@@ -1210,7 +1210,7 @@ void TTrain::OnCommand_wheelspinbrakeactivate( TTrain *Train, command_data const
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( Train->mvOccupied->BrakeSystem != ElectroPneumatic ) {
|
if( Train->mvOccupied->BrakeSystem != TBrakeSystem::ElectroPneumatic ) {
|
||||||
// standard behaviour
|
// standard behaviour
|
||||||
if( Command.action == GLFW_PRESS ) {
|
if( Command.action == GLFW_PRESS ) {
|
||||||
// visual feedback
|
// visual feedback
|
||||||
@@ -1229,7 +1229,7 @@ void TTrain::OnCommand_wheelspinbrakeactivate( TTrain *Train, command_data const
|
|||||||
// visual feedback
|
// visual feedback
|
||||||
Train->ggAntiSlipButton.UpdateValue( 1.0, Train->dsbPneumaticSwitch );
|
Train->ggAntiSlipButton.UpdateValue( 1.0, Train->dsbPneumaticSwitch );
|
||||||
|
|
||||||
if( ( Train->mvOccupied->BrakeHandle == St113 )
|
if( ( Train->mvOccupied->BrakeHandle == TBrakeHandle::St113 )
|
||||||
&& ( Train->mvControlled->EpFuse == true ) ) {
|
&& ( Train->mvControlled->EpFuse == true ) ) {
|
||||||
Train->mvOccupied->SwitchEPBrake( 1 );
|
Train->mvOccupied->SwitchEPBrake( 1 );
|
||||||
}
|
}
|
||||||
@@ -2074,8 +2074,8 @@ void TTrain::OnCommand_linebreakerclose( TTrain *Train, command_data const &Comm
|
|||||||
|
|
||||||
if( Train->m_linebreakerstate == 2 ) {
|
if( Train->m_linebreakerstate == 2 ) {
|
||||||
// we don't need to start the diesel twice, but the other types (with impulse switch setup) still need to be launched
|
// we don't need to start the diesel twice, but the other types (with impulse switch setup) still need to be launched
|
||||||
if( ( Train->mvControlled->EngineType != DieselEngine )
|
if( ( Train->mvControlled->EngineType != TEngineType::DieselEngine )
|
||||||
&& ( Train->mvControlled->EngineType != DieselElectric ) ) {
|
&& ( Train->mvControlled->EngineType != TEngineType::DieselElectric ) ) {
|
||||||
// try to finalize state change of the line breaker, set the state based on the outcome
|
// try to finalize state change of the line breaker, set the state based on the outcome
|
||||||
Train->m_linebreakerstate = (
|
Train->m_linebreakerstate = (
|
||||||
Train->mvControlled->MainSwitch( true ) ?
|
Train->mvControlled->MainSwitch( true ) ?
|
||||||
@@ -2387,7 +2387,7 @@ void TTrain::OnCommand_convertertoggle( TTrain *Train, command_data const &Comma
|
|||||||
|
|
||||||
void TTrain::OnCommand_converterenable( TTrain *Train, command_data const &Command ) {
|
void TTrain::OnCommand_converterenable( TTrain *Train, command_data const &Command ) {
|
||||||
|
|
||||||
if( Train->mvControlled->ConverterStart == start::automatic ) {
|
if( Train->mvControlled->ConverterStart == start_t::automatic ) {
|
||||||
// let the automatic thing do its automatic thing...
|
// let the automatic thing do its automatic thing...
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2421,7 +2421,7 @@ void TTrain::OnCommand_converterenable( TTrain *Train, command_data const &Comma
|
|||||||
|
|
||||||
void TTrain::OnCommand_converterdisable( TTrain *Train, command_data const &Command ) {
|
void TTrain::OnCommand_converterdisable( TTrain *Train, command_data const &Command ) {
|
||||||
|
|
||||||
if( Train->mvControlled->ConverterStart == start::automatic ) {
|
if( Train->mvControlled->ConverterStart == start_t::automatic ) {
|
||||||
// let the automatic thing do its automatic thing...
|
// let the automatic thing do its automatic thing...
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2461,7 +2461,7 @@ void TTrain::OnCommand_converterdisable( TTrain *Train, command_data const &Comm
|
|||||||
|
|
||||||
void TTrain::OnCommand_convertertogglelocal( TTrain *Train, command_data const &Command ) {
|
void TTrain::OnCommand_convertertogglelocal( TTrain *Train, command_data const &Command ) {
|
||||||
|
|
||||||
if( Train->mvOccupied->ConverterStart == start::automatic ) {
|
if( Train->mvOccupied->ConverterStart == start_t::automatic ) {
|
||||||
// let the automatic thing do its automatic thing...
|
// let the automatic thing do its automatic thing...
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -3714,7 +3714,7 @@ void TTrain::OnCommand_doortoggleleft( TTrain *Train, command_data const &Comman
|
|||||||
Train->mvOccupied->DoorLeftOpened :
|
Train->mvOccupied->DoorLeftOpened :
|
||||||
Train->mvOccupied->DoorRightOpened ) ) {
|
Train->mvOccupied->DoorRightOpened ) ) {
|
||||||
// open
|
// open
|
||||||
if( Train->mvOccupied->DoorOpenCtrl != control::driver ) {
|
if( Train->mvOccupied->DoorOpenCtrl != control_t::driver ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if( Train->mvOccupied->ActiveCab == 1 ) {
|
if( Train->mvOccupied->ActiveCab == 1 ) {
|
||||||
@@ -3729,7 +3729,7 @@ void TTrain::OnCommand_doortoggleleft( TTrain *Train, command_data const &Comman
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// close
|
// close
|
||||||
if( Train->mvOccupied->DoorCloseCtrl != control::driver ) {
|
if( Train->mvOccupied->DoorCloseCtrl != control_t::driver ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO: move door opening/closing to the update, so the switch animation doesn't hinge on door working
|
// TODO: move door opening/closing to the update, so the switch animation doesn't hinge on door working
|
||||||
@@ -3755,7 +3755,7 @@ void TTrain::OnCommand_doortoggleright( TTrain *Train, command_data const &Comma
|
|||||||
Train->mvOccupied->DoorRightOpened :
|
Train->mvOccupied->DoorRightOpened :
|
||||||
Train->mvOccupied->DoorLeftOpened ) ) {
|
Train->mvOccupied->DoorLeftOpened ) ) {
|
||||||
// open
|
// open
|
||||||
if( Train->mvOccupied->DoorOpenCtrl != control::driver ) {
|
if( Train->mvOccupied->DoorOpenCtrl != control_t::driver ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if( Train->mvOccupied->ActiveCab == 1 ) {
|
if( Train->mvOccupied->ActiveCab == 1 ) {
|
||||||
@@ -3770,7 +3770,7 @@ void TTrain::OnCommand_doortoggleright( TTrain *Train, command_data const &Comma
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// close
|
// close
|
||||||
if( Train->mvOccupied->DoorCloseCtrl != control::driver ) {
|
if( Train->mvOccupied->DoorCloseCtrl != control_t::driver ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if( Train->mvOccupied->ActiveCab == 1 ) {
|
if( Train->mvOccupied->ActiveCab == 1 ) {
|
||||||
@@ -4107,8 +4107,8 @@ void TTrain::UpdateMechPosition(double dt)
|
|||||||
&& ( pMechOffset.y < 4.0 ) ) // Ra 15-01: przy oglądaniu pantografu bujanie przeszkadza
|
&& ( pMechOffset.y < 4.0 ) ) // Ra 15-01: przy oglądaniu pantografu bujanie przeszkadza
|
||||||
{
|
{
|
||||||
Math3D::vector3 shakevector;
|
Math3D::vector3 shakevector;
|
||||||
if( ( mvOccupied->EngineType == DieselElectric )
|
if( ( mvOccupied->EngineType == TEngineType::DieselElectric )
|
||||||
|| ( mvOccupied->EngineType == DieselEngine ) ) {
|
|| ( mvOccupied->EngineType == TEngineType::DieselEngine ) ) {
|
||||||
if( std::abs( mvOccupied->enrot ) > 0.0 ) {
|
if( std::abs( mvOccupied->enrot ) > 0.0 ) {
|
||||||
// engine vibration
|
// engine vibration
|
||||||
shakevector.x +=
|
shakevector.x +=
|
||||||
@@ -4258,8 +4258,8 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
|| ( ggMainOnButton.GetDesiredValue() > 0.95 ) ) {
|
|| ( ggMainOnButton.GetDesiredValue() > 0.95 ) ) {
|
||||||
// keep track of period the line breaker button is held down, to determine when/if circuit closes
|
// keep track of period the line breaker button is held down, to determine when/if circuit closes
|
||||||
if( ( fHVoltage > 0.5 * mvControlled->EnginePowerSource.MaxVoltage )
|
if( ( fHVoltage > 0.5 * mvControlled->EnginePowerSource.MaxVoltage )
|
||||||
|| ( ( mvControlled->EngineType != ElectricSeriesMotor )
|
|| ( ( mvControlled->EngineType != TEngineType::ElectricSeriesMotor )
|
||||||
&& ( mvControlled->EngineType != ElectricInductionMotor )
|
&& ( mvControlled->EngineType != TEngineType::ElectricInductionMotor )
|
||||||
&& ( true == mvControlled->Battery ) ) ) {
|
&& ( true == mvControlled->Battery ) ) ) {
|
||||||
// prevent the switch from working if there's no power
|
// prevent the switch from working if there's no power
|
||||||
// TODO: consider whether it makes sense for diesel engines and such
|
// TODO: consider whether it makes sense for diesel engines and such
|
||||||
@@ -4284,8 +4284,8 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
if( m_linebreakerstate == 2 ) {
|
if( m_linebreakerstate == 2 ) {
|
||||||
// for diesels and/or vehicles with toggle switch setup we complete the engine start here
|
// for diesels and/or vehicles with toggle switch setup we complete the engine start here
|
||||||
if( ( ggMainOnButton.SubModel == nullptr )
|
if( ( ggMainOnButton.SubModel == nullptr )
|
||||||
|| ( ( mvControlled->EngineType == DieselEngine )
|
|| ( ( mvControlled->EngineType == TEngineType::DieselEngine )
|
||||||
|| ( mvControlled->EngineType == DieselElectric ) ) ) {
|
|| ( mvControlled->EngineType == TEngineType::DieselElectric ) ) ) {
|
||||||
// try to finalize state change of the line breaker, set the state based on the outcome
|
// try to finalize state change of the line breaker, set the state based on the outcome
|
||||||
m_linebreakerstate = (
|
m_linebreakerstate = (
|
||||||
mvControlled->MainSwitch( true ) ?
|
mvControlled->MainSwitch( true ) ?
|
||||||
@@ -4350,7 +4350,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( mvOccupied->BrakeHandle == FVel6 )
|
if( ( mvOccupied->BrakeHandle == TBrakeHandle::FVel6 )
|
||||||
&& ( mvOccupied->fBrakeCtrlPos < 0.0 )
|
&& ( mvOccupied->fBrakeCtrlPos < 0.0 )
|
||||||
&& ( Global.iFeedbackMode < 3 ) ) {
|
&& ( Global.iFeedbackMode < 3 ) ) {
|
||||||
// Odskakiwanie hamulce EP
|
// Odskakiwanie hamulce EP
|
||||||
@@ -4389,8 +4389,8 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ra 2014-09: napięcia i prądy muszą być ustalone najpierw, bo wysyłane są ewentualnie na PoKeys
|
// Ra 2014-09: napięcia i prądy muszą być ustalone najpierw, bo wysyłane są ewentualnie na PoKeys
|
||||||
if ((mvControlled->EngineType != DieselElectric)
|
if ((mvControlled->EngineType != TEngineType::DieselElectric)
|
||||||
&& (mvControlled->EngineType != ElectricInductionMotor)) // Ra 2014-09: czy taki rozdzia? ma sens?
|
&& (mvControlled->EngineType != TEngineType::ElectricInductionMotor)) // Ra 2014-09: czy taki rozdzia? ma sens?
|
||||||
fHVoltage = mvControlled->RunningTraction.TractionVoltage; // Winger czy to nie jest zle?
|
fHVoltage = mvControlled->RunningTraction.TractionVoltage; // Winger czy to nie jest zle?
|
||||||
// *mvControlled->Mains);
|
// *mvControlled->Mains);
|
||||||
else
|
else
|
||||||
@@ -4453,7 +4453,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
asCarName[i] = p->name();
|
asCarName[i] = p->name();
|
||||||
bPants[iUnitNo - 1][0] = (bPants[iUnitNo - 1][0] || p->MoverParameters->PantFrontUp);
|
bPants[iUnitNo - 1][0] = (bPants[iUnitNo - 1][0] || p->MoverParameters->PantFrontUp);
|
||||||
bPants[iUnitNo - 1][1] = (bPants[iUnitNo - 1][1] || p->MoverParameters->PantRearUp);
|
bPants[iUnitNo - 1][1] = (bPants[iUnitNo - 1][1] || p->MoverParameters->PantRearUp);
|
||||||
bComp[iUnitNo - 1][0] = (bComp[iUnitNo - 1][0] || p->MoverParameters->CompressorAllow || (p->MoverParameters->CompressorStart == start::automatic));
|
bComp[iUnitNo - 1][0] = (bComp[iUnitNo - 1][0] || p->MoverParameters->CompressorAllow || (p->MoverParameters->CompressorStart == start_t::automatic));
|
||||||
bSlip[i] = p->MoverParameters->SlippingWheels;
|
bSlip[i] = p->MoverParameters->SlippingWheels;
|
||||||
if (p->MoverParameters->CompressorSpeed > 0.00001)
|
if (p->MoverParameters->CompressorSpeed > 0.00001)
|
||||||
{
|
{
|
||||||
@@ -4552,12 +4552,12 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
// hunter-080812: wyrzucanie szybkiego na elektrykach gdy nie ma napiecia przy dowolnym ustawieniu kierunkowego
|
// hunter-080812: wyrzucanie szybkiego na elektrykach gdy nie ma napiecia przy dowolnym ustawieniu kierunkowego
|
||||||
// Ra: to już jest w T_MoverParameters::TractionForce(), ale zależy od kierunku
|
// Ra: to już jest w T_MoverParameters::TractionForce(), ale zależy od kierunku
|
||||||
if( ( mvControlled->Mains )
|
if( ( mvControlled->Mains )
|
||||||
&& ( mvControlled->EngineType == ElectricSeriesMotor ) ) {
|
&& ( mvControlled->EngineType == TEngineType::ElectricSeriesMotor ) ) {
|
||||||
if( std::max( mvControlled->GetTrainsetVoltage(), std::fabs( mvControlled->RunningTraction.TractionVoltage ) ) < 0.5 * mvControlled->EnginePowerSource.MaxVoltage ) {
|
if( std::max( mvControlled->GetTrainsetVoltage(), std::fabs( mvControlled->RunningTraction.TractionVoltage ) ) < 0.5 * mvControlled->EnginePowerSource.MaxVoltage ) {
|
||||||
// TODO: check whether it should affect entire consist for EMU
|
// TODO: check whether it should affect entire consist for EMU
|
||||||
// TODO: check whether it should happen if there's power supplied alternatively through hvcouplers
|
// TODO: check whether it should happen if there's power supplied alternatively through hvcouplers
|
||||||
// TODO: potentially move this to the mover module, as there isn't much reason to have this dependent on the operator presence
|
// TODO: potentially move this to the mover module, as there isn't much reason to have this dependent on the operator presence
|
||||||
mvControlled->MainSwitch( false, ( mvControlled->TrainType == dt_EZT ? range::unit : range::local ) );
|
mvControlled->MainSwitch( false, ( mvControlled->TrainType == dt_EZT ? range_t::unit : range_t::local ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4579,7 +4579,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
{
|
{
|
||||||
fConverterTimer += Deltatime;
|
fConverterTimer += Deltatime;
|
||||||
if ((mvControlled->CompressorFlag == true) && (mvControlled->CompressorPower == 1) &&
|
if ((mvControlled->CompressorFlag == true) && (mvControlled->CompressorPower == 1) &&
|
||||||
((mvControlled->EngineType == ElectricSeriesMotor) ||
|
((mvControlled->EngineType == TEngineType::ElectricSeriesMotor) ||
|
||||||
(mvControlled->TrainType == dt_EZT)) &&
|
(mvControlled->TrainType == dt_EZT)) &&
|
||||||
(DynamicObject->Controller == Humandriver)) // hunter-110212: poprawka dla EZT
|
(DynamicObject->Controller == Humandriver)) // hunter-110212: poprawka dla EZT
|
||||||
{ // hunter-091012: poprawka (zmiana warunku z CompressorPower /rozne od
|
{ // hunter-091012: poprawka (zmiana warunku z CompressorPower /rozne od
|
||||||
@@ -4588,7 +4588,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
{
|
{
|
||||||
mvControlled->ConvOvldFlag = true;
|
mvControlled->ConvOvldFlag = true;
|
||||||
if (mvControlled->TrainType != dt_EZT)
|
if (mvControlled->TrainType != dt_EZT)
|
||||||
mvControlled->MainSwitch( false, ( mvControlled->TrainType == dt_EZT ? range::unit : range::local ) );
|
mvControlled->MainSwitch( false, ( mvControlled->TrainType == dt_EZT ? range_t::unit : range_t::local ) );
|
||||||
}
|
}
|
||||||
else if( fConverterTimer >= fConverterPrzekaznik ) {
|
else if( fConverterTimer >= fConverterPrzekaznik ) {
|
||||||
// changed switch from always true to take into account state of the compressor switch
|
// changed switch from always true to take into account state of the compressor switch
|
||||||
@@ -4707,13 +4707,13 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
ggLVoltage.Update();
|
ggLVoltage.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mvControlled->EngineType == DieselElectric)
|
if (mvControlled->EngineType == TEngineType::DieselElectric)
|
||||||
{ // ustawienie zmiennych dla silnika spalinowego
|
{ // ustawienie zmiennych dla silnika spalinowego
|
||||||
fEngine[1] = mvControlled->ShowEngineRotation(1);
|
fEngine[1] = mvControlled->ShowEngineRotation(1);
|
||||||
fEngine[2] = mvControlled->ShowEngineRotation(2);
|
fEngine[2] = mvControlled->ShowEngineRotation(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (mvControlled->EngineType == DieselEngine)
|
else if (mvControlled->EngineType == TEngineType::DieselEngine)
|
||||||
{ // albo dla innego spalinowego
|
{ // albo dla innego spalinowego
|
||||||
fEngine[1] = mvControlled->ShowEngineRotation(1);
|
fEngine[1] = mvControlled->ShowEngineRotation(1);
|
||||||
fEngine[2] = mvControlled->ShowEngineRotation(2);
|
fEngine[2] = mvControlled->ShowEngineRotation(2);
|
||||||
@@ -5161,7 +5161,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
false) // nie blokujemy AI
|
false) // nie blokujemy AI
|
||||||
{ // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
|
{ // Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
|
||||||
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console
|
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console
|
||||||
if (mvOccupied->BrakeHandle == FV4a)
|
if (mvOccupied->BrakeHandle == TBrakeHandle::FV4a)
|
||||||
{
|
{
|
||||||
double b = Console::AnalogCalibrateGet(0);
|
double b = Console::AnalogCalibrateGet(0);
|
||||||
b = b * 8.0 - 2.0;
|
b = b * 8.0 - 2.0;
|
||||||
@@ -5169,7 +5169,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
ggBrakeCtrl.UpdateValue(b); // przesów bez zaokrąglenia
|
ggBrakeCtrl.UpdateValue(b); // przesów bez zaokrąglenia
|
||||||
mvOccupied->BrakeLevelSet(b);
|
mvOccupied->BrakeLevelSet(b);
|
||||||
}
|
}
|
||||||
if (mvOccupied->BrakeHandle == FVel6) // może można usunąć ograniczenie do FV4a i FVel6?
|
if (mvOccupied->BrakeHandle == TBrakeHandle::FVel6) // może można usunąć ograniczenie do FV4a i FVel6?
|
||||||
{
|
{
|
||||||
double b = Console::AnalogCalibrateGet(0);
|
double b = Console::AnalogCalibrateGet(0);
|
||||||
b = b * 7.0 - 1.0;
|
b = b * 7.0 - 1.0;
|
||||||
@@ -5191,23 +5191,23 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if( ( DynamicObject->Mechanik != nullptr )
|
if( ( DynamicObject->Mechanik != nullptr )
|
||||||
&& ( false == DynamicObject->Mechanik->AIControllFlag ) // nie blokujemy AI
|
&& ( false == DynamicObject->Mechanik->AIControllFlag ) // nie blokujemy AI
|
||||||
&& ( mvOccupied->BrakeLocHandle == FD1 )
|
&& ( mvOccupied->BrakeLocHandle == TBrakeHandle::FD1 )
|
||||||
&& ( ( Global.iFeedbackMode == 4 )
|
&& ( ( Global.iFeedbackMode == 4 )
|
||||||
/*|| ( Global.bMWDmasterEnable && Global.bMWDBreakEnable )*/ ) ) {
|
/*|| ( Global.bMWDmasterEnable && Global.bMWDBreakEnable )*/ ) ) {
|
||||||
// Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
|
// Ra: nie najlepsze miejsce, ale na początek gdzieś to dać trzeba
|
||||||
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console
|
// Firleju: dlatego kasujemy i zastepujemy funkcją w Console
|
||||||
auto const b = clamp<double>(
|
auto const b = clamp<double>(
|
||||||
Console::AnalogCalibrateGet( 1 ) * 10.0,
|
Console::AnalogCalibrateGet( 1 ),
|
||||||
0.0,
|
0.0,
|
||||||
LocalBrakePosNo );
|
1.0 );
|
||||||
ggLocalBrake.UpdateValue( b ); // przesów bez zaokrąglenia
|
mvOccupied->LocalBrakePosA = b;
|
||||||
mvOccupied->LocalBrakePos = int( 1.09 * b ); // sposób zaokrąglania jest do ustalenia
|
ggLocalBrake.UpdateValue( b * LocalBrakePosNo );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
// standardowa prodedura z kranem powiązanym z klawiaturą
|
// standardowa prodedura z kranem powiązanym z klawiaturą
|
||||||
ggLocalBrake.UpdateValue( std::max<double>( mvOccupied->LocalBrakePos, mvOccupied->LocalBrakePosA * LocalBrakePosNo ) );
|
ggLocalBrake.UpdateValue( mvOccupied->LocalBrakePosA * LocalBrakePosNo );
|
||||||
}
|
}
|
||||||
ggLocalBrake.Update();
|
ggLocalBrake.Update();
|
||||||
}
|
}
|
||||||
@@ -5369,7 +5369,7 @@ bool TTrain::Update( double const Deltatime )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// anti slip system activation, maintained while the control button is down
|
// anti slip system activation, maintained while the control button is down
|
||||||
if( mvOccupied->BrakeSystem != ElectroPneumatic ) {
|
if( mvOccupied->BrakeSystem != TBrakeSystem::ElectroPneumatic ) {
|
||||||
if( ggAntiSlipButton.GetDesiredValue() > 0.95 ) {
|
if( ggAntiSlipButton.GetDesiredValue() > 0.95 ) {
|
||||||
mvControlled->AntiSlippingBrake();
|
mvControlled->AntiSlippingBrake();
|
||||||
}
|
}
|
||||||
@@ -5475,8 +5475,8 @@ TTrain::update_sounds( double const Deltatime ) {
|
|||||||
|
|
||||||
// McZapkie-280302 - syczenie
|
// McZapkie-280302 - syczenie
|
||||||
// TODO: softer volume reduction than plain abrupt stop, perhaps as reusable wrapper?
|
// TODO: softer volume reduction than plain abrupt stop, perhaps as reusable wrapper?
|
||||||
if( ( mvOccupied->BrakeHandle == FV4a )
|
if( ( mvOccupied->BrakeHandle == TBrakeHandle::FV4a )
|
||||||
|| ( mvOccupied->BrakeHandle == FVel6 ) ) {
|
|| ( mvOccupied->BrakeHandle == TBrakeHandle::FVel6 ) ) {
|
||||||
// upuszczanie z PG
|
// upuszczanie z PG
|
||||||
fPPress = interpolate( fPPress, static_cast<float>( mvOccupied->Handle->GetSound( s_fv4a_b ) ), 0.05f );
|
fPPress = interpolate( fPPress, static_cast<float>( mvOccupied->Handle->GetSound( s_fv4a_b ) ), 0.05f );
|
||||||
volume = (
|
volume = (
|
||||||
@@ -7139,9 +7139,9 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
|
|||||||
if (Parser.getToken<std::string>() == "analog")
|
if (Parser.getToken<std::string>() == "analog")
|
||||||
{
|
{
|
||||||
// McZapkie-300302: zegarek
|
// McZapkie-300302: zegarek
|
||||||
ggClockSInd.Init(DynamicObject->mdKabina->GetFromName("ClockShand"), gt_Rotate, 1.0/60.0);
|
ggClockSInd.Init(DynamicObject->mdKabina->GetFromName("ClockShand"), TGaugeType::gt_Rotate, 1.0/60.0);
|
||||||
ggClockMInd.Init(DynamicObject->mdKabina->GetFromName("ClockMhand"), gt_Rotate, 1.0/60.0);
|
ggClockMInd.Init(DynamicObject->mdKabina->GetFromName("ClockMhand"), TGaugeType::gt_Rotate, 1.0/60.0);
|
||||||
ggClockHInd.Init(DynamicObject->mdKabina->GetFromName("ClockHhand"), gt_Rotate, 1.0/12.0);
|
ggClockHInd.Init(DynamicObject->mdKabina->GetFromName("ClockHhand"), TGaugeType::gt_Rotate, 1.0/12.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (Label == "evoltage:")
|
else if (Label == "evoltage:")
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ bool TWorld::Init( GLFWwindow *Window ) {
|
|||||||
Controlled = NULL;
|
Controlled = NULL;
|
||||||
mvControlled = NULL;
|
mvControlled = NULL;
|
||||||
SafeDelete( Train );
|
SafeDelete( Train );
|
||||||
Camera.Type = tp_Free;
|
Camera.Type = TCameraType::tp_Free;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -141,7 +141,7 @@ bool TWorld::Init( GLFWwindow *Window ) {
|
|||||||
glfwSwapBuffers( window );
|
glfwSwapBuffers( window );
|
||||||
Controlled = NULL;
|
Controlled = NULL;
|
||||||
mvControlled = NULL;
|
mvControlled = NULL;
|
||||||
Camera.Type = tp_Free;
|
Camera.Type = TCameraType::tp_Free;
|
||||||
DebugCamera = Camera;
|
DebugCamera = Camera;
|
||||||
Global.DebugCameraPosition = DebugCamera.Pos;
|
Global.DebugCameraPosition = DebugCamera.Pos;
|
||||||
}
|
}
|
||||||
@@ -699,7 +699,7 @@ bool TWorld::Update() {
|
|||||||
|
|
||||||
// fixed step part of the camera update
|
// fixed step part of the camera update
|
||||||
if( ( Train != nullptr )
|
if( ( Train != nullptr )
|
||||||
&& ( Camera.Type == tp_Follow )
|
&& ( Camera.Type == TCameraType::tp_Follow )
|
||||||
&& ( false == DebugCameraFlag ) ) {
|
&& ( false == DebugCameraFlag ) ) {
|
||||||
// jeśli jazda w kabinie, przeliczyć trzeba parametry kamery
|
// jeśli jazda w kabinie, przeliczyć trzeba parametry kamery
|
||||||
Train->UpdateMechPosition( m_secondaryupdaterate );
|
Train->UpdateMechPosition( m_secondaryupdaterate );
|
||||||
@@ -825,7 +825,7 @@ TWorld::Update_Camera( double const Deltatime ) {
|
|||||||
Global.CabWindowOpen = false;
|
Global.CabWindowOpen = false;
|
||||||
|
|
||||||
if( ( Train != nullptr )
|
if( ( Train != nullptr )
|
||||||
&& ( Camera.Type == tp_Follow )
|
&& ( Camera.Type == TCameraType::tp_Follow )
|
||||||
&& ( false == DebugCameraFlag ) ) {
|
&& ( false == DebugCameraFlag ) ) {
|
||||||
// jeśli jazda w kabinie, przeliczyć trzeba parametry kamery
|
// jeśli jazda w kabinie, przeliczyć trzeba parametry kamery
|
||||||
auto tempangle = Controlled->VectorFront() * ( Controlled->MoverParameters->ActiveCab == -1 ? -1 : 1 );
|
auto tempangle = Controlled->VectorFront() * ( Controlled->MoverParameters->ActiveCab == -1 ? -1 : 1 );
|
||||||
|
|||||||
@@ -207,6 +207,8 @@ eu07_application::init( int Argc, char *Argv[] ) {
|
|||||||
int
|
int
|
||||||
eu07_application::run() {
|
eu07_application::run() {
|
||||||
|
|
||||||
|
// HACK: prevent mouse capture before simulation starts
|
||||||
|
Global.ControlPicking = true;
|
||||||
// TODO: move input sources and their initializations to the application mode member
|
// TODO: move input sources and their initializations to the application mode member
|
||||||
input::Keyboard.init();
|
input::Keyboard.init();
|
||||||
input::Mouse.init();
|
input::Mouse.init();
|
||||||
@@ -238,6 +240,7 @@ eu07_application::run() {
|
|||||||
|
|
||||||
set_cursor( GLFW_CURSOR_DISABLED );
|
set_cursor( GLFW_CURSOR_DISABLED );
|
||||||
set_cursor_pos( 0, 0 );
|
set_cursor_pos( 0, 0 );
|
||||||
|
Global.ControlPicking = false;
|
||||||
|
|
||||||
// main application loop
|
// main application loop
|
||||||
// TODO: split into parts and delegate these to application mode member
|
// TODO: split into parts and delegate these to application mode member
|
||||||
@@ -390,12 +393,12 @@ eu07_application::init_settings( int Argc, char *Argv[] ) {
|
|||||||
}
|
}
|
||||||
else if( token == "-s" ) {
|
else if( token == "-s" ) {
|
||||||
if( i + 1 < Argc ) {
|
if( i + 1 < Argc ) {
|
||||||
Global.SceneryFile = Argv[ ++i ];
|
Global.SceneryFile = ToLower( Argv[ ++i ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( token == "-v" ) {
|
else if( token == "-v" ) {
|
||||||
if( i + 1 < Argc ) {
|
if( i + 1 < Argc ) {
|
||||||
Global.asHumanCtrlVehicle = Argv[ ++i ];
|
Global.asHumanCtrlVehicle = ToLower( Argv[ ++i ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -21,6 +21,20 @@ namespace audio {
|
|||||||
openal_renderer renderer;
|
openal_renderer renderer;
|
||||||
|
|
||||||
float const EU07_SOUND_CUTOFFRANGE { 3000.f }; // 2750 m = max expected emitter spawn range, plus safety margin
|
float const EU07_SOUND_CUTOFFRANGE { 3000.f }; // 2750 m = max expected emitter spawn range, plus safety margin
|
||||||
|
float const EU07_SOUND_VELOCITYLIMIT { 250 / 3.6f }; // 343 m/sec ~= speed of sound; arbitrary limit of 250 km/h
|
||||||
|
|
||||||
|
// potentially clamps length of provided vector to 343 meters
|
||||||
|
// TBD: make a generic method for utilities out of this
|
||||||
|
glm::vec3
|
||||||
|
limit_velocity( glm::vec3 const &Velocity ) {
|
||||||
|
|
||||||
|
auto const ratio { glm::length( Velocity ) / EU07_SOUND_VELOCITYLIMIT };
|
||||||
|
|
||||||
|
return (
|
||||||
|
ratio > 1.f ?
|
||||||
|
Velocity / ratio :
|
||||||
|
Velocity );
|
||||||
|
}
|
||||||
|
|
||||||
// starts playback of queued buffers
|
// starts playback of queued buffers
|
||||||
void
|
void
|
||||||
@@ -97,7 +111,7 @@ openal_source::sync_with( sound_properties const &State ) {
|
|||||||
&& ( sound_range >= 0 )
|
&& ( sound_range >= 0 )
|
||||||
&& ( properties.location != glm::dvec3() ) ) {
|
&& ( properties.location != glm::dvec3() ) ) {
|
||||||
// after sound position was initialized we can start velocity calculations
|
// after sound position was initialized we can start velocity calculations
|
||||||
sound_velocity = ( State.location - properties.location ) / update_deltatime;
|
sound_velocity = limit_velocity( ( State.location - properties.location ) / update_deltatime );
|
||||||
}
|
}
|
||||||
// NOTE: velocity at this point can be either listener velocity for global sounds, actual sound velocity, or 0 if sound position is yet unknown
|
// NOTE: velocity at this point can be either listener velocity for global sounds, actual sound velocity, or 0 if sound position is yet unknown
|
||||||
::alSourcefv( id, AL_VELOCITY, glm::value_ptr( sound_velocity ) );
|
::alSourcefv( id, AL_VELOCITY, glm::value_ptr( sound_velocity ) );
|
||||||
@@ -311,7 +325,7 @@ openal_renderer::update( double const Deltatime ) {
|
|||||||
m_listenerposition = listenerposition;
|
m_listenerposition = listenerposition;
|
||||||
m_listenervelocity = (
|
m_listenervelocity = (
|
||||||
glm::length( listenermovement ) < 1000.0 ? // large jumps are typically camera changes
|
glm::length( listenermovement ) < 1000.0 ? // large jumps are typically camera changes
|
||||||
listenermovement / Deltatime :
|
limit_velocity( listenermovement / Deltatime ) :
|
||||||
glm::vec3() );
|
glm::vec3() );
|
||||||
::alListenerfv( AL_VELOCITY, reinterpret_cast<ALfloat const *>( glm::value_ptr( m_listenervelocity ) ) );
|
::alListenerfv( AL_VELOCITY, reinterpret_cast<ALfloat const *>( glm::value_ptr( m_listenervelocity ) ) );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,14 +69,14 @@ private:
|
|||||||
|
|
||||||
// members
|
// members
|
||||||
commandsetup_sequence m_commands;
|
commandsetup_sequence m_commands;
|
||||||
user_command m_command; // last, if any, issued command
|
user_command m_command { user_command::none }; // last, if any, issued command
|
||||||
usercommand_map m_bindings;
|
usercommand_map m_bindings;
|
||||||
command_relay m_relay;
|
command_relay m_relay;
|
||||||
bool m_shift{ false };
|
bool m_shift { false };
|
||||||
bool m_ctrl{ false };
|
bool m_ctrl { false };
|
||||||
bindings_cache m_bindingscache;
|
bindings_cache m_bindingscache;
|
||||||
glm::vec2 m_movementhorizontal;
|
glm::vec2 m_movementhorizontal { 0.f };
|
||||||
float m_movementvertical;
|
float m_movementvertical { 0.f };
|
||||||
std::array<char, GLFW_KEY_LAST + 1> m_keys;
|
std::array<char, GLFW_KEY_LAST + 1> m_keys;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ WyslijObsadzone()
|
|||||||
r.fPar[ 16 * i + 4 ] = vehicle->GetPosition().x;
|
r.fPar[ 16 * i + 4 ] = vehicle->GetPosition().x;
|
||||||
r.fPar[ 16 * i + 5 ] = vehicle->GetPosition().y;
|
r.fPar[ 16 * i + 5 ] = vehicle->GetPosition().y;
|
||||||
r.fPar[ 16 * i + 6 ] = vehicle->GetPosition().z;
|
r.fPar[ 16 * i + 6 ] = vehicle->GetPosition().z;
|
||||||
r.iPar[ 16 * i + 7 ] = vehicle->Mechanik->GetAction();
|
r.iPar[ 16 * i + 7 ] = static_cast<int>( vehicle->Mechanik->GetAction() );
|
||||||
strcpy( r.cString + 64 * i + 32, vehicle->GetTrack()->IsolatedName().c_str() );
|
strcpy( r.cString + 64 * i + 32, vehicle->GetTrack()->IsolatedName().c_str() );
|
||||||
strcpy( r.cString + 64 * i + 48, vehicle->Mechanik->TrainName().c_str() );
|
strcpy( r.cString + 64 * i + 48, vehicle->Mechanik->TrainName().c_str() );
|
||||||
i++;
|
i++;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ struct stream_units {
|
|||||||
std::vector<GLint> texture { GL_TEXTURE0 }; // unit associated with main texture data stream. TODO: allow multiple units per stream
|
std::vector<GLint> texture { GL_TEXTURE0 }; // unit associated with main texture data stream. TODO: allow multiple units per stream
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<basic_vertex> vertex_array;
|
using vertex_array = std::vector<basic_vertex>;
|
||||||
|
|
||||||
// generic geometry bank class, allows storage, update and drawing of geometry chunks
|
// generic geometry bank class, allows storage, update and drawing of geometry chunks
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@ protected:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<geometry_chunk> geometrychunk_sequence;
|
using geometrychunk_sequence = std::vector<geometry_chunk>;
|
||||||
|
|
||||||
// methods
|
// methods
|
||||||
inline
|
inline
|
||||||
@@ -182,21 +182,21 @@ private:
|
|||||||
bool is_good{ false }; // true if local content of the chunk matches the data on the opengl end
|
bool is_good{ false }; // true if local content of the chunk matches the data on the opengl end
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<chunk_record> chunkrecord_sequence;
|
using chunkrecord_sequence = std::vector<chunk_record>;
|
||||||
|
|
||||||
// methods:
|
// methods:
|
||||||
// create() subclass details
|
// create() subclass details
|
||||||
void
|
void
|
||||||
create_( gfx::geometry_handle const &Geometry );
|
create_( gfx::geometry_handle const &Geometry ) override;
|
||||||
// replace() subclass details
|
// replace() subclass details
|
||||||
void
|
void
|
||||||
replace_( gfx::geometry_handle const &Geometry );
|
replace_( gfx::geometry_handle const &Geometry ) override;
|
||||||
// draw() subclass details
|
// draw() subclass details
|
||||||
void
|
void
|
||||||
draw_( gfx::geometry_handle const &Geometry, gfx::stream_units const &Units, unsigned int const Streams );
|
draw_( gfx::geometry_handle const &Geometry, gfx::stream_units const &Units, unsigned int const Streams ) override;
|
||||||
// release() subclass details
|
// release() subclass details
|
||||||
void
|
void
|
||||||
release_();
|
release_() override;
|
||||||
void
|
void
|
||||||
bind_buffer();
|
bind_buffer();
|
||||||
void
|
void
|
||||||
@@ -237,21 +237,21 @@ private:
|
|||||||
unsigned int streams { 0 }; // stream combination used to generate the display list
|
unsigned int streams { 0 }; // stream combination used to generate the display list
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<chunk_record> chunkrecord_sequence;
|
using chunkrecord_sequence = std::vector<chunk_record>;
|
||||||
|
|
||||||
// methods:
|
// methods:
|
||||||
// create() subclass details
|
// create() subclass details
|
||||||
void
|
void
|
||||||
create_( gfx::geometry_handle const &Geometry );
|
create_( gfx::geometry_handle const &Geometry ) override;
|
||||||
// replace() subclass details
|
// replace() subclass details
|
||||||
void
|
void
|
||||||
replace_( gfx::geometry_handle const &Geometry );
|
replace_( gfx::geometry_handle const &Geometry ) override;
|
||||||
// draw() subclass details
|
// draw() subclass details
|
||||||
void
|
void
|
||||||
draw_( gfx::geometry_handle const &Geometry, gfx::stream_units const &Units, unsigned int const Streams );
|
draw_( gfx::geometry_handle const &Geometry, gfx::stream_units const &Units, unsigned int const Streams ) override;
|
||||||
// release () subclass details
|
// release () subclass details
|
||||||
void
|
void
|
||||||
release_();
|
release_() override;
|
||||||
void
|
void
|
||||||
delete_list( gfx::geometry_handle const &Geometry );
|
delete_list( gfx::geometry_handle const &Geometry );
|
||||||
|
|
||||||
@@ -262,7 +262,7 @@ private:
|
|||||||
|
|
||||||
// geometry bank manager, holds collection of geometry banks
|
// geometry bank manager, holds collection of geometry banks
|
||||||
|
|
||||||
typedef geometry_handle geometrybank_handle;
|
using geometrybank_handle = geometry_handle;
|
||||||
|
|
||||||
class geometrybank_manager {
|
class geometrybank_manager {
|
||||||
|
|
||||||
@@ -302,11 +302,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// types:
|
// types:
|
||||||
typedef std::pair<
|
using geometrybanktimepoint_pair = std::pair< std::shared_ptr<geometry_bank>, resource_timestamp >;
|
||||||
std::shared_ptr<geometry_bank>,
|
using geometrybanktimepointpair_sequence = std::deque< geometrybanktimepoint_pair >;
|
||||||
resource_timestamp > geometrybanktimepoint_pair;
|
|
||||||
|
|
||||||
typedef std::deque< geometrybanktimepoint_pair > geometrybanktimepointpair_sequence;
|
|
||||||
|
|
||||||
// members:
|
// members:
|
||||||
geometrybanktimepointpair_sequence m_geometrybanks;
|
geometrybanktimepointpair_sequence m_geometrybanks;
|
||||||
|
|||||||
@@ -2350,7 +2350,7 @@ opengl_renderer::Render( TSubModel *Submodel ) {
|
|||||||
::glPushMatrix();
|
::glPushMatrix();
|
||||||
if( Submodel->fMatrix )
|
if( Submodel->fMatrix )
|
||||||
::glMultMatrixf( Submodel->fMatrix->readArray() );
|
::glMultMatrixf( Submodel->fMatrix->readArray() );
|
||||||
if( Submodel->b_Anim )
|
if( Submodel->b_Anim != TAnimType::at_None )
|
||||||
Submodel->RaAnimation( Submodel->b_Anim );
|
Submodel->RaAnimation( Submodel->b_Anim );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3169,7 +3169,7 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel ) {
|
|||||||
::glPushMatrix();
|
::glPushMatrix();
|
||||||
if( Submodel->fMatrix )
|
if( Submodel->fMatrix )
|
||||||
::glMultMatrixf( Submodel->fMatrix->readArray() );
|
::glMultMatrixf( Submodel->fMatrix->readArray() );
|
||||||
if( Submodel->b_aAnim )
|
if( Submodel->b_aAnim != TAnimType::at_None )
|
||||||
Submodel->RaAnimation( Submodel->b_aAnim );
|
Submodel->RaAnimation( Submodel->b_aAnim );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
6
uart.cpp
6
uart.cpp
@@ -95,7 +95,7 @@ uart_input::recall_bindings() {
|
|||||||
|
|
||||||
auto const bindingtype { typelookup->second };
|
auto const bindingtype { typelookup->second };
|
||||||
std::array<user_command, 2> bindingcommands { user_command::none, user_command::none };
|
std::array<user_command, 2> bindingcommands { user_command::none, user_command::none };
|
||||||
auto const commandcount { ( bindingtype == toggle ? 2 : 1 ) };
|
auto const commandcount { ( bindingtype == input_type_t::toggle ? 2 : 1 ) };
|
||||||
for( int commandidx = 0; commandidx < commandcount; ++commandidx ) {
|
for( int commandidx = 0; commandidx < commandcount; ++commandidx ) {
|
||||||
// grab command(s) associated with the input pin
|
// grab command(s) associated with the input pin
|
||||||
auto const bindingcommandname { entryparser.getToken<std::string>() };
|
auto const bindingcommandname { entryparser.getToken<std::string>() };
|
||||||
@@ -166,14 +166,14 @@ void uart_input::poll()
|
|||||||
|
|
||||||
auto const type { std::get<input_type_t>( entry ) };
|
auto const type { std::get<input_type_t>( entry ) };
|
||||||
auto const action { (
|
auto const action { (
|
||||||
type != impulse ?
|
type != input_type_t::impulse ?
|
||||||
GLFW_PRESS :
|
GLFW_PRESS :
|
||||||
( true == state ?
|
( true == state ?
|
||||||
GLFW_PRESS :
|
GLFW_PRESS :
|
||||||
GLFW_RELEASE ) ) };
|
GLFW_RELEASE ) ) };
|
||||||
|
|
||||||
auto const command { (
|
auto const command { (
|
||||||
type != toggle ?
|
type != input_type_t::toggle ?
|
||||||
std::get<2>( entry ) :
|
std::get<2>( entry ) :
|
||||||
( true == state ?
|
( true == state ?
|
||||||
std::get<2>( entry ) :
|
std::get<2>( entry ) :
|
||||||
|
|||||||
2
uart.h
2
uart.h
@@ -48,7 +48,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// types
|
// types
|
||||||
enum input_type_t
|
enum class input_type_t
|
||||||
{
|
{
|
||||||
toggle, // two commands, each mapped to one state; press event on state change
|
toggle, // two commands, each mapped to one state; press event on state change
|
||||||
impulse, // one command; press event when set, release when cleared
|
impulse, // one command; press event when set, release when cleared
|
||||||
|
|||||||
14
uilayer.cpp
14
uilayer.cpp
@@ -276,7 +276,7 @@ ui_layer::update() {
|
|||||||
else if( mover->ActiveDir < 0 ) { uitextline2 += " R"; }
|
else if( mover->ActiveDir < 0 ) { uitextline2 += " R"; }
|
||||||
else { uitextline2 += " N"; }
|
else { uitextline2 += " N"; }
|
||||||
|
|
||||||
uitextline3 = "Brakes:" + to_string( mover->fBrakeCtrlPos, 1, 5 ) + "+" + std::to_string( mover->LocalBrakePos ) + ( mover->SlippingWheels ? " !" : " " );
|
uitextline3 = "Brakes:" + to_string( mover->fBrakeCtrlPos, 1, 5 ) + "+" + to_string( mover->LocalBrakePosA * LocalBrakePosNo, 0 ) + ( mover->SlippingWheels ? " !" : " " );
|
||||||
|
|
||||||
uitextline4 = (
|
uitextline4 = (
|
||||||
true == TestFlag( mover->SecuritySystem.Status, s_aware ) ?
|
true == TestFlag( mover->SecuritySystem.Status, s_aware ) ?
|
||||||
@@ -472,7 +472,7 @@ ui_layer::update() {
|
|||||||
uitextline2 += ( vehicle->MoverParameters->OilPump.is_active ? "O" : ( vehicle->MoverParameters->OilPump.is_enabled ? "o" : "." ) );
|
uitextline2 += ( vehicle->MoverParameters->OilPump.is_active ? "O" : ( vehicle->MoverParameters->OilPump.is_enabled ? "o" : "." ) );
|
||||||
uitextline2 += ( false == vehicle->MoverParameters->ConverterAllowLocal ? "-" : ( vehicle->MoverParameters->ConverterAllow ? ( vehicle->MoverParameters->ConverterFlag ? "X" : "x" ) : "." ) );
|
uitextline2 += ( false == vehicle->MoverParameters->ConverterAllowLocal ? "-" : ( vehicle->MoverParameters->ConverterAllow ? ( vehicle->MoverParameters->ConverterFlag ? "X" : "x" ) : "." ) );
|
||||||
uitextline2 += ( vehicle->MoverParameters->ConvOvldFlag ? "!" : "." );
|
uitextline2 += ( vehicle->MoverParameters->ConvOvldFlag ? "!" : "." );
|
||||||
uitextline2 += ( vehicle->MoverParameters->CompressorFlag ? "C" : ( false == vehicle->MoverParameters->CompressorAllowLocal ? "-" : ( ( vehicle->MoverParameters->CompressorAllow || vehicle->MoverParameters->CompressorStart == start::automatic ) ? "c" : "." ) ) );
|
uitextline2 += ( vehicle->MoverParameters->CompressorFlag ? "C" : ( false == vehicle->MoverParameters->CompressorAllowLocal ? "-" : ( ( vehicle->MoverParameters->CompressorAllow || vehicle->MoverParameters->CompressorStart == start_t::automatic ) ? "c" : "." ) ) );
|
||||||
uitextline2 += ( vehicle->MoverParameters->CompressorGovernorLock ? "!" : "." );
|
uitextline2 += ( vehicle->MoverParameters->CompressorGovernorLock ? "!" : "." );
|
||||||
|
|
||||||
auto const train { Global.pWorld->train() };
|
auto const train { Global.pWorld->train() };
|
||||||
@@ -876,9 +876,9 @@ ui_layer::update() {
|
|||||||
|
|
||||||
uitextline2 =
|
uitextline2 =
|
||||||
"HamZ=" + to_string( vehicle->MoverParameters->fBrakeCtrlPos, 2 )
|
"HamZ=" + to_string( vehicle->MoverParameters->fBrakeCtrlPos, 2 )
|
||||||
+ "; HamP=" + std::to_string( vehicle->MoverParameters->LocalBrakePos ) + "/" + to_string( vehicle->MoverParameters->LocalBrakePosA, 2 )
|
+ "; HamP=" + to_string( vehicle->MoverParameters->LocalBrakePosA, 2 )
|
||||||
+ "; NasJ=" + std::to_string( vehicle->MoverParameters->MainCtrlPos ) + "(" + std::to_string( vehicle->MoverParameters->MainCtrlActualPos ) + ")"
|
+ "; NasJ=" + std::to_string( vehicle->MoverParameters->MainCtrlPos ) + "(" + std::to_string( vehicle->MoverParameters->MainCtrlActualPos ) + ")"
|
||||||
+ ( ( vehicle->MoverParameters->ShuntMode && vehicle->MoverParameters->EngineType == DieselElectric ) ?
|
+ ( ( vehicle->MoverParameters->ShuntMode && vehicle->MoverParameters->EngineType == TEngineType::DieselElectric ) ?
|
||||||
"; NasB=" + to_string( vehicle->MoverParameters->AnPos, 2 ) :
|
"; NasB=" + to_string( vehicle->MoverParameters->AnPos, 2 ) :
|
||||||
"; NasB=" + std::to_string( vehicle->MoverParameters->ScndCtrlPos ) + "(" + std::to_string( vehicle->MoverParameters->ScndCtrlActualPos ) + ")" )
|
"; NasB=" + std::to_string( vehicle->MoverParameters->ScndCtrlPos ) + "(" + std::to_string( vehicle->MoverParameters->ScndCtrlActualPos ) + ")" )
|
||||||
+ "; I=" +
|
+ "; I=" +
|
||||||
@@ -943,7 +943,7 @@ ui_layer::update() {
|
|||||||
uitextline3 += " Vtrack " + to_string( vehicle->MoverParameters->RunningTrack.Velmax, 2 );
|
uitextline3 += " Vtrack " + to_string( vehicle->MoverParameters->RunningTrack.Velmax, 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ( vehicle->MoverParameters->EnginePowerSource.SourceType == CurrentCollector )
|
if( ( vehicle->MoverParameters->EnginePowerSource.SourceType == TPowerSource::CurrentCollector )
|
||||||
|| ( vehicle->MoverParameters->TrainType == dt_EZT ) ) {
|
|| ( vehicle->MoverParameters->TrainType == dt_EZT ) ) {
|
||||||
uitextline3 +=
|
uitextline3 +=
|
||||||
"; pant. " + to_string( vehicle->MoverParameters->PantPress, 2 )
|
"; pant. " + to_string( vehicle->MoverParameters->PantPress, 2 )
|
||||||
@@ -971,7 +971,7 @@ ui_layer::update() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// induction motor data
|
// induction motor data
|
||||||
if( vehicle->MoverParameters->EngineType == ElectricInductionMotor ) {
|
if( vehicle->MoverParameters->EngineType == TEngineType::ElectricInductionMotor ) {
|
||||||
|
|
||||||
UITable->text_lines.emplace_back( " eimc: eimv: press:", Global.UITextColor );
|
UITable->text_lines.emplace_back( " eimc: eimv: press:", Global.UITextColor );
|
||||||
for( int i = 0; i <= 20; ++i ) {
|
for( int i = 0; i <= 20; ++i ) {
|
||||||
@@ -994,7 +994,7 @@ ui_layer::update() {
|
|||||||
UITable->text_lines.emplace_back( parameters, Global.UITextColor );
|
UITable->text_lines.emplace_back( parameters, Global.UITextColor );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (vehicle->MoverParameters->EngineType == DieselEngine) {
|
if (vehicle->MoverParameters->EngineType == TEngineType::DieselEngine) {
|
||||||
std::string parameters = "param value";
|
std::string parameters = "param value";
|
||||||
UITable->text_lines.emplace_back(parameters, Global.UITextColor);
|
UITable->text_lines.emplace_back(parameters, Global.UITextColor);
|
||||||
parameters = "efill: " + to_string(vehicle->MoverParameters->dizel_fill, 2, 9);
|
parameters = "efill: " + to_string(vehicle->MoverParameters->dizel_fill, 2, 9);
|
||||||
|
|||||||
@@ -307,8 +307,6 @@ nearest_segment_point( VecType_ const &Segmentstart, VecType_ const &Segmentend,
|
|||||||
return c1 / c2;
|
return c1 / c2;
|
||||||
}
|
}
|
||||||
|
|
||||||
class cParser;
|
glm::dvec3 LoadPoint( class cParser &Input );
|
||||||
|
|
||||||
glm::dvec3 LoadPoint( cParser &Input );
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user