mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-20 12:39:17 +02:00
Merge branch 'tmj-dev' into dev
This commit is contained in:
98
World.cpp
98
World.cpp
@@ -94,7 +94,7 @@ simulation_time::init() {
|
||||
m_time.wSecond = 0;
|
||||
}
|
||||
|
||||
m_yearday = yearday( m_time.wDay, m_time.wMonth, m_time.wYear );
|
||||
m_yearday = year_day( m_time.wDay, m_time.wMonth, m_time.wYear );
|
||||
}
|
||||
|
||||
void
|
||||
@@ -142,16 +142,15 @@ simulation_time::update( double const Deltatime ) {
|
||||
}
|
||||
|
||||
int
|
||||
simulation_time::yearday( int Day, const int Month, const int Year ) {
|
||||
simulation_time::year_day( int Day, const int Month, const int Year ) const {
|
||||
|
||||
char daytab[ 2 ][ 13 ] = {
|
||||
char const daytab[ 2 ][ 13 ] = {
|
||||
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
|
||||
{ 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
|
||||
};
|
||||
int i, leap;
|
||||
|
||||
leap = ( Year % 4 == 0 ) && ( Year % 100 != 0 ) || ( Year % 400 == 0 );
|
||||
for( i = 1; i < Month; ++i )
|
||||
int leap { ( Year % 4 == 0 ) && ( Year % 100 != 0 ) || ( Year % 400 == 0 ) };
|
||||
for( int i = 1; i < Month; ++i )
|
||||
Day += daytab[ leap ][ i ];
|
||||
|
||||
return Day;
|
||||
@@ -213,7 +212,6 @@ TWorld::TWorld()
|
||||
TWorld::~TWorld()
|
||||
{
|
||||
TrainDelete();
|
||||
// Ground.Free(); //Ra: usunięcie obiektów przed usunięciem dźwięków - sypie się
|
||||
}
|
||||
|
||||
void TWorld::TrainDelete(TDynamicObject *d)
|
||||
@@ -233,7 +231,6 @@ void TWorld::TrainDelete(TDynamicObject *d)
|
||||
Train = NULL;
|
||||
Controlled = NULL; // tego też już nie ma
|
||||
mvControlled = NULL;
|
||||
Global::pUserDynamic = NULL; // tego też nie ma
|
||||
};
|
||||
|
||||
bool TWorld::Init( GLFWwindow *Window ) {
|
||||
@@ -248,7 +245,6 @@ bool TWorld::Init( GLFWwindow *Window ) {
|
||||
WriteLog( "For online documentation and additional files refer to: http://eu07.pl");
|
||||
|
||||
UILayer.set_background( "logo" );
|
||||
|
||||
glfwSetWindowTitle( window, ( Global::AppName + " (" + Global::SceneryFile + ")" ).c_str() ); // nazwa scenerii
|
||||
UILayer.set_progress(0.01);
|
||||
UILayer.set_progress( "Loading scenery / Wczytywanie scenerii" );
|
||||
@@ -276,7 +272,6 @@ bool TWorld::Init( GLFWwindow *Window ) {
|
||||
{
|
||||
Controlled = Train->Dynamic();
|
||||
mvControlled = Controlled->ControlledFind()->MoverParameters;
|
||||
Global::pUserDynamic = Controlled; // renerowanie pojazdu względem kabiny
|
||||
WriteLog("Player train init OK");
|
||||
|
||||
glfwSetWindowTitle( window, ( Global::AppName + " (" + Controlled->MoverParameters->Name + " @ " + Global::SceneryFile + ")" ).c_str() );
|
||||
@@ -697,7 +692,7 @@ void TWorld::OnKeyDown(int cKey)
|
||||
vehicle->MoverParameters->DecBrakeMult())
|
||||
if (Train)
|
||||
{ // dźwięk oczywiście jest w kabinie
|
||||
Train->play_sound( Train->dsbSwitch );
|
||||
Train->dsbSwitch.play();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -725,7 +720,7 @@ void TWorld::OnKeyDown(int cKey)
|
||||
vehicle->iLights[CouplNr] = (vehicle->iLights[CouplNr] & ~mask) | set;
|
||||
if (Train)
|
||||
{ // Ra: ten dźwięk z kabiny to przegięcie, ale na razie zostawiam
|
||||
Train->play_sound( Train->dsbSwitch );
|
||||
Train->dsbSwitch.play();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -739,14 +734,6 @@ void TWorld::OnKeyDown(int cKey)
|
||||
if ((vehicle->MoverParameters->LocalBrake == ManualBrake) ||
|
||||
(vehicle->MoverParameters->MBrake == true))
|
||||
vehicle->MoverParameters->IncManualBrakeLevel(1);
|
||||
else
|
||||
;
|
||||
else if (vehicle->MoverParameters->LocalBrake != ManualBrake)
|
||||
if (vehicle->MoverParameters->IncLocalBrakeLevelFAST())
|
||||
if (Train)
|
||||
{ // dźwięk oczywiście jest w kabinie
|
||||
Train->play_sound( Train->dsbPneumaticRelay );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cKey == Global::Keys[k_DecLocalBrakeLevel])
|
||||
@@ -758,14 +745,6 @@ void TWorld::OnKeyDown(int cKey)
|
||||
if ((vehicle->MoverParameters->LocalBrake == ManualBrake) ||
|
||||
(vehicle->MoverParameters->MBrake == true))
|
||||
vehicle->MoverParameters->DecManualBrakeLevel(1);
|
||||
else
|
||||
;
|
||||
else if (vehicle->MoverParameters->LocalBrake != ManualBrake)
|
||||
if (vehicle->MoverParameters->DecLocalBrakeLevelFAST())
|
||||
if (Train)
|
||||
{ // dźwięk oczywiście jest w kabinie
|
||||
Train->play_sound( Train->dsbPneumaticRelay );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -781,7 +760,6 @@ void TWorld::InOutKey( bool const Near )
|
||||
FreeFlyModeFlag = !FreeFlyModeFlag; // zmiana widoku
|
||||
if (FreeFlyModeFlag) {
|
||||
// jeżeli poza kabiną, przestawiamy w jej okolicę - OK
|
||||
Global::pUserDynamic = NULL; // bez renderowania względem kamery
|
||||
if (Train) {
|
||||
// cache current cab position so there's no need to set it all over again after each out-in switch
|
||||
Train->pMechSittingPosition = Train->pMechOffset;
|
||||
@@ -797,7 +775,6 @@ void TWorld::InOutKey( bool const Near )
|
||||
{ // jazda w kabinie
|
||||
if (Train)
|
||||
{
|
||||
Global::pUserDynamic = Controlled; // renerowanie względem kamery
|
||||
Train->Dynamic()->bDisplayCab = true;
|
||||
Train->Dynamic()->ABuSetModelShake(
|
||||
vector3(0, 0, 0)); // zerowanie przesunięcia przed powrotem?
|
||||
@@ -909,7 +886,7 @@ bool TWorld::Update() {
|
||||
Timer::UpdateTimers(Global::iPause != 0);
|
||||
Timer::subsystem.sim_total.start();
|
||||
|
||||
if( (Global::iPause == false)
|
||||
if( (Global::iPause == 0)
|
||||
|| (m_init == false) ) {
|
||||
// jak pauza, to nie ma po co tego przeliczać
|
||||
simulation::Time.update( Timer::GetDeltaTime() );
|
||||
@@ -1072,18 +1049,11 @@ bool TWorld::Update() {
|
||||
|
||||
Update_Camera( dt );
|
||||
|
||||
{
|
||||
glm::dmat4 cam_matrix;
|
||||
Camera.SetMatrix(cam_matrix);
|
||||
|
||||
glm::vec3 pos(Camera.Pos.x, Camera.Pos.y, Camera.Pos.z);
|
||||
sound_man->set_listener(pos, glm::mat3(cam_matrix));
|
||||
sound_man->update(Global::iPause ? 0.0f : dt);
|
||||
}
|
||||
|
||||
Timer::subsystem.sim_total.stop();
|
||||
|
||||
simulation::Region->update_sounds();
|
||||
audio::renderer.update( Global::iPause ? 0.0 : dt );
|
||||
|
||||
GfxRenderer.Update( dt );
|
||||
ResourceSweep();
|
||||
|
||||
@@ -1138,6 +1108,8 @@ TWorld::Update_Camera( double const Deltatime ) {
|
||||
|
||||
if( DebugCameraFlag ) { DebugCamera.Update(); }
|
||||
else { Camera.Update(); } // uwzględnienie ruchu wywołanego klawiszami
|
||||
// reset window state, it'll be set again if applicable in a check below
|
||||
Global::CabWindowOpen = false;
|
||||
|
||||
if( ( Train != nullptr )
|
||||
&& ( Camera.Type == tp_Follow )
|
||||
@@ -1150,6 +1122,8 @@ TWorld::Update_Camera( double const Deltatime ) {
|
||||
&& ( (Console::Pressed( Global::Keys[ k_MechLeft ])
|
||||
|| (Console::Pressed( Global::Keys[ k_MechRight ]))))) {
|
||||
// jeśli lusterko lewe albo prawe (bez rzucania na razie)
|
||||
Global::CabWindowOpen = true;
|
||||
|
||||
bool lr = Console::Pressed( Global::Keys[ k_MechLeft ] );
|
||||
// Camera.Yaw powinno być wyzerowane, aby po powrocie patrzeć do przodu
|
||||
Camera.Pos = Controlled->GetPosition() + Train->MirrorPosition( lr ); // pozycja lusterka
|
||||
@@ -1159,12 +1133,10 @@ TWorld::Update_Camera( double const Deltatime ) {
|
||||
else if( Global::shiftState ) {
|
||||
// patrzenie w bok przez szybę
|
||||
Camera.LookAt = Camera.Pos - ( lr ? -1 : 1 ) * Train->Dynamic()->VectorLeft() * Train->Dynamic()->MoverParameters->ActiveCab;
|
||||
Global::SetCameraRotation( -modelrotate );
|
||||
}
|
||||
else { // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny - jakby z lusterka,
|
||||
// ale bez odbicia
|
||||
Camera.LookAt = Camera.Pos - Train->GetDirection() * Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1
|
||||
Global::SetCameraRotation( M_PI - modelrotate ); // tu już trzeba uwzględnić lusterka
|
||||
}
|
||||
Camera.Roll = std::atan( Train->pMechShake.x * Train->fMechRoll ); // hustanie kamery na boki
|
||||
Camera.Pitch = 0.5 * std::atan( Train->vMechVelocity.z * Train->fMechPitch ); // hustanie kamery przod tyl
|
||||
@@ -1197,11 +1169,10 @@ TWorld::Update_Camera( double const Deltatime ) {
|
||||
else // patrzenie w kierunku osi pojazdu, z uwzględnieniem kabiny
|
||||
Camera.LookAt = Train->GetWorldMechPosition() + Train->GetDirection() * 5.0 * Train->Dynamic()->MoverParameters->ActiveCab; //-1 albo 1
|
||||
Camera.vUp = Train->GetUp();
|
||||
Global::SetCameraRotation( Camera.Yaw - modelrotate ); // tu już trzeba uwzględnić lusterka
|
||||
}
|
||||
}
|
||||
else { // kamera nieruchoma
|
||||
Global::SetCameraRotation( Camera.Yaw - M_PI );
|
||||
else {
|
||||
// kamera nieruchoma
|
||||
}
|
||||
// all done, update camera position to the new value
|
||||
Global::pCameraPosition = Camera.Pos;
|
||||
@@ -1443,7 +1414,11 @@ TWorld::Update_UI() {
|
||||
+ ( vehicle->MoverParameters->bPantKurek3 ? "-ZG" : "|ZG" );
|
||||
|
||||
uitextline2 +=
|
||||
"; Ft: " + to_string( vehicle->MoverParameters->Ft * 0.001f * vehicle->MoverParameters->ActiveCab, 1 )
|
||||
"; Ft: " + to_string(
|
||||
vehicle->MoverParameters->Ft * 0.001f * (
|
||||
vehicle->MoverParameters->ActiveCab ? vehicle->MoverParameters->ActiveCab :
|
||||
vehicle->ctOwner ? vehicle->ctOwner->Controlling()->ActiveCab :
|
||||
1 ), 1 )
|
||||
+ ", Fb: " + to_string( vehicle->MoverParameters->Fb * 0.001f, 1 )
|
||||
+ ", Fr: " + to_string( vehicle->MoverParameters->Adhesive( vehicle->MoverParameters->RunningTrack.friction ), 2 )
|
||||
+ ( vehicle->MoverParameters->SlippingWheels ? " (!)" : "" );
|
||||
@@ -1645,21 +1620,25 @@ TWorld::Update_UI() {
|
||||
if( vehicle == nullptr ) {
|
||||
break;
|
||||
}
|
||||
uitextline1 =
|
||||
"vel: " + to_string(vehicle->GetVelocity(), 2) + "/" + to_string(vehicle->MoverParameters->nrot* M_PI * vehicle->MoverParameters->WheelDiameter * 3.6, 2)
|
||||
+ " km/h" + (vehicle->MoverParameters->SlippingWheels ? " (!)" : " ")
|
||||
+ "; dist: " + to_string(vehicle->MoverParameters->DistCounter, 2) + " km"
|
||||
+ "; pos: ("
|
||||
+ to_string(vehicle->GetPosition().x, 2) + ", "
|
||||
+ to_string(vehicle->GetPosition().y, 2) + ", "
|
||||
+ to_string(vehicle->GetPosition().z, 2) + "), PM="
|
||||
+ to_string(vehicle->MoverParameters->WheelFlat, 1) + " mm";
|
||||
uitextline1 =
|
||||
"vel: " + to_string( vehicle->GetVelocity(), 2 ) + "/" + to_string( vehicle->MoverParameters->nrot* M_PI * vehicle->MoverParameters->WheelDiameter * 3.6, 2 )
|
||||
+ " km/h;" + ( vehicle->MoverParameters->SlippingWheels ? " (!)" : " " )
|
||||
+ " dist: " + to_string( vehicle->MoverParameters->DistCounter, 2 ) + " km"
|
||||
+ "; pos: ("
|
||||
+ to_string( vehicle->GetPosition().x, 2 ) + ", "
|
||||
+ to_string( vehicle->GetPosition().y, 2 ) + ", "
|
||||
+ to_string( vehicle->GetPosition().z, 2 ) + "), PM="
|
||||
+ to_string( vehicle->MoverParameters->WheelFlat, 1 ) + " mm; enrot="
|
||||
+ to_string( vehicle->MoverParameters->enrot * 60, 0 ) + " tmrot="
|
||||
+ to_string( std::abs( vehicle->MoverParameters->nrot ) * vehicle->MoverParameters->Transmision.Ratio * 60, 0 );
|
||||
|
||||
uitextline2 =
|
||||
"HamZ=" + to_string( vehicle->MoverParameters->fBrakeCtrlPos, 2 )
|
||||
+ "; HamP=" + std::to_string( vehicle->MoverParameters->LocalBrakePos ) + "/" + to_string( vehicle->MoverParameters->LocalBrakePosA, 2 )
|
||||
+ "; NasJ=" + std::to_string( vehicle->MoverParameters->MainCtrlPos ) + "(" + std::to_string( vehicle->MoverParameters->MainCtrlActualPos ) + ")"
|
||||
+ "; NasB=" + std::to_string( vehicle->MoverParameters->ScndCtrlPos ) + "(" + std::to_string( vehicle->MoverParameters->ScndCtrlActualPos ) + ")"
|
||||
+ ( vehicle->MoverParameters->ShuntMode ?
|
||||
"; NasB=" + to_string( vehicle->MoverParameters->AnPos, 2 ) :
|
||||
"; NasB=" + std::to_string( vehicle->MoverParameters->ScndCtrlPos ) + "(" + std::to_string( vehicle->MoverParameters->ScndCtrlActualPos ) + ")" )
|
||||
+ "; I=" +
|
||||
( vehicle->MoverParameters->TrainType == dt_EZT ?
|
||||
std::to_string( int( vehicle->MoverParameters->ShowCurrent( 0 ) ) ) :
|
||||
@@ -2052,15 +2031,15 @@ void TWorld::CreateE3D(std::string const &Path, bool Dynamic)
|
||||
if( dynamic->iCabs ) { // jeśli ma jakąkolwiek kabinę
|
||||
delete Train;
|
||||
Train = new TTrain();
|
||||
if( dynamic->iCabs & 1 ) {
|
||||
if( dynamic->iCabs & 0x1 ) {
|
||||
dynamic->MoverParameters->ActiveCab = 1;
|
||||
Train->Init( dynamic, true );
|
||||
}
|
||||
if( dynamic->iCabs & 4 ) {
|
||||
if( dynamic->iCabs & 0x4 ) {
|
||||
dynamic->MoverParameters->ActiveCab = -1;
|
||||
Train->Init( dynamic, true );
|
||||
}
|
||||
if( dynamic->iCabs & 2 ) {
|
||||
if( dynamic->iCabs & 0x2 ) {
|
||||
dynamic->MoverParameters->ActiveCab = 0;
|
||||
Train->Init( dynamic, true );
|
||||
}
|
||||
@@ -2133,7 +2112,6 @@ void TWorld::ChangeDynamic() {
|
||||
Train->Dynamic()->asBaseDir +
|
||||
Train->Dynamic()->MoverParameters->TypeName + ".mmd" );
|
||||
if( !FreeFlyModeFlag ) {
|
||||
Global::pUserDynamic = Controlled; // renerowanie względem kamery
|
||||
Train->Dynamic()->bDisplayCab = true;
|
||||
Train->Dynamic()->ABuSetModelShake(
|
||||
vector3( 0, 0, 0 ) ); // zerowanie przesunięcia przed powrotem?
|
||||
|
||||
Reference in New Issue
Block a user