mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 16:19:19 +02:00
minor dmu handling ai tweaks, minor bug fixes
This commit is contained in:
14
Driver.cpp
14
Driver.cpp
@@ -1532,7 +1532,7 @@ TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche,
|
|||||||
// próg opóźnienia dla zadziałania hamulca
|
// próg opóźnienia dla zadziałania hamulca
|
||||||
fAccThreshold = (
|
fAccThreshold = (
|
||||||
mvOccupied->TrainType == dt_EZT ? -0.6 :
|
mvOccupied->TrainType == dt_EZT ? -0.6 :
|
||||||
mvOccupied->TrainType == dt_DMU ? -0.4 :
|
mvOccupied->TrainType == dt_DMU ? -0.45 :
|
||||||
-0.2 );
|
-0.2 );
|
||||||
}
|
}
|
||||||
// TrainParams=NewTrainParams;
|
// TrainParams=NewTrainParams;
|
||||||
@@ -1552,8 +1552,12 @@ TController::TController(bool AI, TDynamicObject *NewControll, bool InitPsyche,
|
|||||||
TableClear();
|
TableClear();
|
||||||
|
|
||||||
if( WriteLogFlag ) {
|
if( WriteLogFlag ) {
|
||||||
_mkdir( "physicslog\\" );
|
#ifdef _WIN32
|
||||||
LogFile.open( std::string( "physicslog\\" + VehicleName + ".dat" ),
|
_mkdir( "physicslog" );
|
||||||
|
#elif __linux__
|
||||||
|
mkdir( "physicslog", 0644 );
|
||||||
|
#endif
|
||||||
|
LogFile.open( std::string( "physicslog/" + VehicleName + ".dat" ),
|
||||||
std::ios::in | std::ios::out | std::ios::trunc );
|
std::ios::in | std::ios::out | std::ios::trunc );
|
||||||
#if LOGPRESS == 0
|
#if LOGPRESS == 0
|
||||||
LogFile << std::string( " Time [s] Velocity [m/s] Acceleration [m/ss] Coupler.Dist[m] "
|
LogFile << std::string( " Time [s] Velocity [m/s] Acceleration [m/ss] Coupler.Dist[m] "
|
||||||
@@ -1829,7 +1833,7 @@ void TController::AutoRewident()
|
|||||||
fBrakeReaction = 0.25;
|
fBrakeReaction = 0.25;
|
||||||
}
|
}
|
||||||
else if( mvOccupied->TrainType == dt_DMU ) {
|
else if( mvOccupied->TrainType == dt_DMU ) {
|
||||||
fAccThreshold = std::max( -fBrake_a0[ BrakeAccTableSize ] - 8 * fBrake_a1[ BrakeAccTableSize ], /*-0.7*/ -0.4 );
|
fAccThreshold = std::max( -fBrake_a0[ BrakeAccTableSize ] - 8 * fBrake_a1[ BrakeAccTableSize ], -0.45 );
|
||||||
fBrakeReaction = 0.25;
|
fBrakeReaction = 0.25;
|
||||||
}
|
}
|
||||||
else if (ustaw > 16)
|
else if (ustaw > 16)
|
||||||
@@ -4565,7 +4569,7 @@ TController::UpdateSituation(double dt) {
|
|||||||
TDynamicObject *d = pVehicles[0]; // pojazd na czele składu
|
TDynamicObject *d = pVehicles[0]; // pojazd na czele składu
|
||||||
while (d)
|
while (d)
|
||||||
{
|
{
|
||||||
AbsAccS += d->MoverParameters->TotalMass * d->MoverParameters->AccS * iDirection;
|
AbsAccS += d->MoverParameters->TotalMass * d->MoverParameters->AccS * d->DirectionGet() * iDirection;
|
||||||
d = d->Next(); // kolejny pojazd, podłączony od tyłu (licząc od czoła)
|
d = d->Next(); // kolejny pojazd, podłączony od tyłu (licząc od czoła)
|
||||||
}
|
}
|
||||||
AbsAccS /= fMass;
|
AbsAccS /= fMass;
|
||||||
|
|||||||
50
DynObj.cpp
50
DynObj.cpp
@@ -3047,10 +3047,11 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
double k; // tymczasowy kąt
|
double k; // tymczasowy kąt
|
||||||
double PantDiff;
|
double PantDiff;
|
||||||
TAnimPant *p; // wskaźnik do obiektu danych pantografu
|
TAnimPant *p; // wskaźnik do obiektu danych pantografu
|
||||||
double fCurrent = (MoverParameters->DynamicBrakeFlag && MoverParameters->ResistorsFlag ?
|
double fCurrent = (
|
||||||
|
( MoverParameters->DynamicBrakeFlag && MoverParameters->ResistorsFlag ) ?
|
||||||
0 :
|
0 :
|
||||||
MoverParameters->Itot) +
|
MoverParameters->Itot )
|
||||||
MoverParameters->TotalCurrent; // prąd pobierany przez pojazd - bez
|
+ MoverParameters->TotalCurrent; // prąd pobierany przez pojazd - bez
|
||||||
// sensu z tym (TotalCurrent)
|
// sensu z tym (TotalCurrent)
|
||||||
// TotalCurrent to bedzie prad nietrakcyjny (niezwiazany z napedem)
|
// TotalCurrent to bedzie prad nietrakcyjny (niezwiazany z napedem)
|
||||||
// fCurrent+=fabs(MoverParameters->Voltage)*1e-6; //prąd płynący przez
|
// fCurrent+=fabs(MoverParameters->Voltage)*1e-6; //prąd płynący przez
|
||||||
@@ -3099,10 +3100,13 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
&& ( PantDiff < 0.01 ) ) // tolerancja niedolegania
|
&& ( PantDiff < 0.01 ) ) // tolerancja niedolegania
|
||||||
{
|
{
|
||||||
if (p->hvPowerWire) {
|
if (p->hvPowerWire) {
|
||||||
auto const wirevoltage { p->hvPowerWire->VoltageGet( MoverParameters->Voltage, fPantCurrent ) };
|
auto const lastvoltage { MoverParameters->PantFrontVolt };
|
||||||
|
// TODO: wyliczyć trzeba prąd przypadający na pantograf i wstawić do GetVoltage()
|
||||||
|
MoverParameters->PantFrontVolt = p->hvPowerWire->VoltageGet( MoverParameters->Voltage, fPantCurrent );
|
||||||
|
fCurrent -= fPantCurrent; // taki prąd płynie przez powyższy pantograf
|
||||||
// TODO: refactor reaction to voltage change to mover as sound event for specific pantograph
|
// TODO: refactor reaction to voltage change to mover as sound event for specific pantograph
|
||||||
if( ( MoverParameters->PantFrontVolt == 0.0 )
|
if( ( lastvoltage == 0.0 )
|
||||||
&& ( wirevoltage > 0.0 ) ) {
|
&& ( MoverParameters->PantFrontVolt > 0.0 ) ) {
|
||||||
for( auto &pantograph : m_pantographsounds ) {
|
for( auto &pantograph : m_pantographsounds ) {
|
||||||
if( pantograph.sPantUp.offset().z > 0 ) {
|
if( pantograph.sPantUp.offset().z > 0 ) {
|
||||||
// limit to pantographs located in the front half of the vehicle
|
// limit to pantographs located in the front half of the vehicle
|
||||||
@@ -3110,9 +3114,6 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: wyliczyć trzeba prąd przypadający na pantograf i wstawić do GetVoltage()
|
|
||||||
MoverParameters->PantFrontVolt = wirevoltage;
|
|
||||||
fCurrent -= fPantCurrent; // taki prąd płynie przez powyższy pantograf
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
MoverParameters->PantFrontVolt = 0.0;
|
MoverParameters->PantFrontVolt = 0.0;
|
||||||
@@ -3133,10 +3134,13 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
&& ( PantDiff < 0.01 ) )
|
&& ( PantDiff < 0.01 ) )
|
||||||
{
|
{
|
||||||
if (p->hvPowerWire) {
|
if (p->hvPowerWire) {
|
||||||
auto const wirevoltage { p->hvPowerWire->VoltageGet( MoverParameters->Voltage, fPantCurrent ) };
|
auto const lastvoltage { MoverParameters->PantRearVolt };
|
||||||
|
// TODO: wyliczyć trzeba prąd przypadający na pantograf i wstawić do GetVoltage()
|
||||||
|
MoverParameters->PantRearVolt = p->hvPowerWire->VoltageGet( MoverParameters->Voltage, fPantCurrent );
|
||||||
|
fCurrent -= fPantCurrent; // taki prąd płynie przez powyższy pantograf
|
||||||
// TODO: refactor reaction to voltage change to mover as sound event for specific pantograph
|
// TODO: refactor reaction to voltage change to mover as sound event for specific pantograph
|
||||||
if( ( MoverParameters->PantRearVolt == 0.0 )
|
if( ( lastvoltage == 0.0 )
|
||||||
&& ( wirevoltage > 0.0 ) ) {
|
&& ( MoverParameters->PantRearVolt > 0.0 ) ) {
|
||||||
for( auto &pantograph : m_pantographsounds ) {
|
for( auto &pantograph : m_pantographsounds ) {
|
||||||
if( pantograph.sPantUp.offset().z < 0 ) {
|
if( pantograph.sPantUp.offset().z < 0 ) {
|
||||||
// limit to pantographs located in the rear half of the vehicle
|
// limit to pantographs located in the rear half of the vehicle
|
||||||
@@ -3144,9 +3148,6 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: wyliczyć trzeba prąd przypadający na pantograf i wstawić do GetVoltage()
|
|
||||||
MoverParameters->PantRearVolt = p->hvPowerWire->VoltageGet( MoverParameters->Voltage, fPantCurrent );
|
|
||||||
fCurrent -= fPantCurrent; // taki prąd płynie przez powyższy pantograf
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
MoverParameters->PantRearVolt = 0.0;
|
MoverParameters->PantRearVolt = 0.0;
|
||||||
@@ -3180,26 +3181,21 @@ bool TDynamicObject::Update(double dt, double dt1)
|
|||||||
MoverParameters->PantFrontUp ) )// jeśli ma być podniesiony
|
MoverParameters->PantFrontUp ) )// jeśli ma być podniesiony
|
||||||
{
|
{
|
||||||
if (PantDiff > 0.001) // jeśli nie dolega do drutu
|
if (PantDiff > 0.001) // jeśli nie dolega do drutu
|
||||||
{ // jeśli poprzednia wysokość jest mniejsza niż pożądana, zwiększyć kąt
|
{ // jeśli poprzednia wysokość jest mniejsza niż pożądana, zwiększyć kąt dolnego
|
||||||
// dolnego
|
|
||||||
// ramienia zgodnie z ciśnieniem
|
// ramienia zgodnie z ciśnieniem
|
||||||
if (pantspeedfactor >
|
if (pantspeedfactor >
|
||||||
0.55 * PantDiff) // 0.55 to około pochodna kąta po wysokości
|
0.55 * PantDiff) // 0.55 to około pochodna kąta po wysokości
|
||||||
k += 0.55 * PantDiff; // ograniczenie "skoku" w danej klatce
|
k += 0.55 * PantDiff; // ograniczenie "skoku" w danej klatce
|
||||||
else
|
else
|
||||||
k += pantspeedfactor; // dolne ramię
|
k += pantspeedfactor; // dolne ramię
|
||||||
// jeśli przekroczono kąt graniczny, zablokować pantograf (wymaga
|
// jeśli przekroczono kąt graniczny, zablokować pantograf
|
||||||
// interwencji
|
// (wymaga interwencji pociągu sieciowego)
|
||||||
// pociągu sieciowego)
|
|
||||||
}
|
}
|
||||||
else if (PantDiff < -0.001)
|
else if (PantDiff < -0.001) {
|
||||||
{ // drut się obniżył albo pantograf
|
// drut się obniżył albo pantograf podniesiony za wysoko
|
||||||
// podniesiony za wysoko
|
|
||||||
// jeśli wysokość jest zbyt duża, wyznaczyć zmniejszenie kąta
|
// jeśli wysokość jest zbyt duża, wyznaczyć zmniejszenie kąta
|
||||||
// jeśli zmniejszenie kąta jest zbyt duże, przejść do trybu łamania
|
// jeśli zmniejszenie kąta jest zbyt duże, przejść do trybu łamania pantografu
|
||||||
// pantografu
|
// if (PantFrontDiff<-0.05) //skok w dół o 5cm daje złąmanie pantografu
|
||||||
// if (PantFrontDiff<-0.05) //skok w dół o 5cm daje złąmanie
|
|
||||||
// pantografu
|
|
||||||
k += 0.4 * PantDiff; // mniej niż pochodna kąta po wysokości
|
k += 0.4 * PantDiff; // mniej niż pochodna kąta po wysokości
|
||||||
} // jeśli wysokość jest dobra, nic więcej nie liczyć
|
} // jeśli wysokość jest dobra, nic więcej nie liczyć
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -517,7 +517,7 @@ int TSubModel::Load( cParser &parser, TModel3d *Model, /*int Pos,*/ bool dynamic
|
|||||||
}
|
}
|
||||||
// Ra 15-01: należało by jeszcze uwzględnić skalowanie wprowadzane przez transformy, aby normalne po przeskalowaniu były jednostkowe
|
// Ra 15-01: należało by jeszcze uwzględnić skalowanie wprowadzane przez transformy, aby normalne po przeskalowaniu były jednostkowe
|
||||||
if( glm::length2( vertexnormal ) == 0.0f ) {
|
if( glm::length2( vertexnormal ) == 0.0f ) {
|
||||||
WriteLog( "Bad model: zero lenght normal vector generated for sub-model \"" + pName + "\"", logtype::model );
|
WriteLog( "Bad model: zero length normal vector generated for sub-model \"" + pName + "\"", logtype::model );
|
||||||
}
|
}
|
||||||
Vertices[ vertexidx ].normal = (
|
Vertices[ vertexidx ].normal = (
|
||||||
glm::length2( vertexnormal ) > 0.0f ?
|
glm::length2( vertexnormal ) > 0.0f ?
|
||||||
|
|||||||
@@ -362,6 +362,7 @@ void TWorld::OnKeyDown(int cKey) {
|
|||||||
case GLFW_KEY_F10: { keyinfo += "F10"; break; }
|
case GLFW_KEY_F10: { keyinfo += "F10"; break; }
|
||||||
case GLFW_KEY_F11: { keyinfo += "F11"; break; }
|
case GLFW_KEY_F11: { keyinfo += "F11"; break; }
|
||||||
case GLFW_KEY_F12: { keyinfo += "F12"; break; }
|
case GLFW_KEY_F12: { keyinfo += "F12"; break; }
|
||||||
|
case GLFW_KEY_PAUSE: { keyinfo += "Pause"; break; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( keyinfo.empty() == false ) {
|
if( keyinfo.empty() == false ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user