16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 12:49:18 +02:00

pantograph valves state update cab control, skydome tweaks, minor bug fixes

This commit is contained in:
tmj-fstate
2021-04-01 17:23:20 +02:00
parent 893e7e9c44
commit 716aefc2ed
13 changed files with 109 additions and 36 deletions

View File

@@ -1168,7 +1168,7 @@ public:
bool UniCtrlIntegratedBrakeCtrl = false; /*zintegrowany nastawnik JH obsluguje hamowanie*/ bool UniCtrlIntegratedBrakeCtrl = false; /*zintegrowany nastawnik JH obsluguje hamowanie*/
bool UniCtrlIntegratedLocalBrakeCtrl = false; /*zintegrowany nastawnik JH obsluguje hamowanie hamulcem pomocniczym*/ bool UniCtrlIntegratedLocalBrakeCtrl = false; /*zintegrowany nastawnik JH obsluguje hamowanie hamulcem pomocniczym*/
int UniCtrlNoPowerPos{ 0 }; // cached highesr position not generating traction force int UniCtrlNoPowerPos{ 0 }; // cached highesr position not generating traction force
std::pair<std::string, std::array<int, 2>> PantsPreset { "", { 0, 0 } }; // pantograph preset switches; .first holds possible setups as chars, .second holds currently selected preset in each cab std::pair<std::string, std::array<int, 2>> PantsPreset { "0132", { 0, 0 } }; // pantograph preset switches; .first holds possible setups as chars, .second holds currently selected preset in each cab
/*-sekcja parametrow dla lokomotywy elektrycznej*/ /*-sekcja parametrow dla lokomotywy elektrycznej*/
TSchemeTable RList; /*lista rezystorow rozruchowych i polaczen silnikow, dla dizla: napelnienia*/ TSchemeTable RList; /*lista rezystorow rozruchowych i polaczen silnikow, dla dizla: napelnienia*/

View File

@@ -285,6 +285,8 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = {
{ user_command::pantographtoggleselected, &TTrain::OnCommand_pantographtoggleselected }, { user_command::pantographtoggleselected, &TTrain::OnCommand_pantographtoggleselected },
{ user_command::pantographraiseselected, &TTrain::OnCommand_pantographraiseselected }, { user_command::pantographraiseselected, &TTrain::OnCommand_pantographraiseselected },
{ user_command::pantographlowerselected, &TTrain::OnCommand_pantographlowerselected }, { user_command::pantographlowerselected, &TTrain::OnCommand_pantographlowerselected },
{ user_command::pantographvalvesupdate, &TTrain::OnCommand_pantographvalvesupdate },
{ user_command::pantographvalvesoff, &TTrain::OnCommand_pantographvalvesoff },
{ user_command::linebreakertoggle, &TTrain::OnCommand_linebreakertoggle }, { user_command::linebreakertoggle, &TTrain::OnCommand_linebreakertoggle },
{ user_command::linebreakeropen, &TTrain::OnCommand_linebreakeropen }, { user_command::linebreakeropen, &TTrain::OnCommand_linebreakeropen },
{ user_command::linebreakerclose, &TTrain::OnCommand_linebreakerclose }, { user_command::linebreakerclose, &TTrain::OnCommand_linebreakerclose },
@@ -2552,6 +2554,20 @@ void TTrain::OnCommand_pantographlowerselected( TTrain *Train, command_data cons
} }
} }
void TTrain::update_pantograph_valves() {
auto const &presets { mvOccupied->PantsPreset.first };
auto &selection { mvOccupied->PantsPreset.second[ cab_to_end() ] };
auto const preset { presets[ selection ] - '0' };
auto const swapends { cab_to_end() != end::front };
// check desired states for both pantographs; value: whether the pantograph should be raised
auto const frontstate { preset & ( swapends ? 2 : 1 ) };
auto const rearstate { preset & ( swapends ? 1 : 2 ) };
mvOccupied->OperatePantographValve( end::front, ( frontstate ? operation_t::enable : operation_t::disable ) );
mvOccupied->OperatePantographValve( end::rear, ( rearstate ? operation_t::enable : operation_t::disable ) );
}
void TTrain::change_pantograph_selection( int const Change ) { void TTrain::change_pantograph_selection( int const Change ) {
auto const &presets { mvOccupied->PantsPreset.first }; auto const &presets { mvOccupied->PantsPreset.first };
@@ -2561,15 +2577,45 @@ void TTrain::change_pantograph_selection( int const Change ) {
if( selection == initialstate ) { return; } // no change, nothing to do if( selection == initialstate ) { return; } // no change, nothing to do
// configure pantograph valves matching the new state // potentially adjust pantograph valves to match the new state
auto const preset { presets[ selection ] - '0' }; if( false == m_controlmapper.contains( "pantvalves_sw:" ) ) {
auto const swapends { cab_to_end() != end::front }; update_pantograph_valves();
// check desired states for both pantographs; value: whether the pantograph should be raised }
auto const frontstate { preset & ( swapends ? 2 : 1 ) }; }
auto const rearstate { preset & ( swapends ? 1 : 2 ) };
// potentially adjust pantograph valves void TTrain::OnCommand_pantographvalvesupdate( TTrain *Train, command_data const &Command ) {
mvOccupied->OperatePantographValve( end::front, ( frontstate ? operation_t::enable : operation_t::disable ) );
mvOccupied->OperatePantographValve( end::rear, ( rearstate ? operation_t::enable : operation_t::disable ) ); if( Command.action == GLFW_REPEAT ) { return; }
if( Command.action == GLFW_PRESS ) {
// implement action
Train->update_pantograph_valves();
// visual feedback
Train->ggPantValvesButton.UpdateValue( 1.0, Train->dsbSwitch );
}
else if( Command.action == GLFW_RELEASE ) {
// visual feedback
// NOTE: pantvalves_sw: is a specialized button, with no toggle behavior support
Train->ggPantValvesButton.UpdateValue( 0.5, Train->dsbSwitch );
}
}
void TTrain::OnCommand_pantographvalvesoff( TTrain *Train, command_data const &Command ) {
if( Command.action == GLFW_REPEAT ) { return; }
if( Command.action == GLFW_PRESS ) {
// implement action
Train->mvOccupied->OperatePantographValve( end::front, operation_t::disable );
Train->mvOccupied->OperatePantographValve( end::rear, operation_t::disable );
// visual feedback
Train->ggPantValvesButton.UpdateValue( 0.0, Train->dsbSwitch );
}
else if( Command.action == GLFW_RELEASE ) {
// visual feedback
// NOTE: pantvalves_sw: is a specialized button, with no toggle behavior support
Train->ggPantValvesButton.UpdateValue( 0.5, Train->dsbSwitch );
}
} }
void TTrain::OnCommand_pantographcompressorvalvetoggle( TTrain *Train, command_data const &Command ) { void TTrain::OnCommand_pantographcompressorvalvetoggle( TTrain *Train, command_data const &Command ) {
@@ -7196,6 +7242,7 @@ bool TTrain::Update( double const Deltatime )
ggPantAllDownButton.Update(); ggPantAllDownButton.Update();
ggPantSelectedDownButton.Update(); ggPantSelectedDownButton.Update();
ggPantSelectedButton.Update(); ggPantSelectedButton.Update();
ggPantValvesButton.Update();
ggPantCompressorButton.Update(); ggPantCompressorButton.Update();
ggPantCompressorValve.Update(); ggPantCompressorValve.Update();
@@ -8398,15 +8445,18 @@ TTrain::MoveToVehicle(TDynamicObject *target) {
if( Dynamic()->Mechanik ) { if( Dynamic()->Mechanik ) {
Dynamic()->Mechanik->MoveTo( target ); Dynamic()->Mechanik->MoveTo( target );
}
DynamicSet( target );
Dynamic()->MechInside = true;
if( Dynamic()->Mechanik ) {
Dynamic()->Controller = Dynamic()->Mechanik->AIControllFlag; Dynamic()->Controller = Dynamic()->Mechanik->AIControllFlag;
Dynamic()->Mechanik->DirectionChange(); Dynamic()->Mechanik->DirectionChange();
} }
else { else {
Dynamic()->Controller = Humandriver; Dynamic()->Controller = Humandriver;
} }
Dynamic()->MechInside = true;
DynamicSet(target);
Occupied()->LimPipePress = Occupied()->PipePress; Occupied()->LimPipePress = Occupied()->PipePress;
Occupied()->CabActivisation( true ); // załączenie rozrządu (wirtualne kabiny) Occupied()->CabActivisation( true ); // załączenie rozrządu (wirtualne kabiny)
@@ -8612,6 +8662,7 @@ void TTrain::clear_cab_controls()
ggPantAllDownButton.Clear(); ggPantAllDownButton.Clear();
ggPantSelectedButton.Clear(); ggPantSelectedButton.Clear();
ggPantSelectedDownButton.Clear(); ggPantSelectedDownButton.Clear();
ggPantValvesButton.Clear();
ggPantCompressorButton.Clear(); ggPantCompressorButton.Clear();
ggPantCompressorValve.Clear(); ggPantCompressorValve.Clear();
ggI1B.Clear(); ggI1B.Clear();
@@ -8806,6 +8857,7 @@ void TTrain::set_cab_controls( int const Cab ) {
1.f : 1.f :
0.f ) ); 0.f ) );
} }
ggPantValvesButton.PutValue( 0.5f );
// auxiliary compressor // auxiliary compressor
ggPantCompressorValve.PutValue( ggPantCompressorValve.PutValue(
mvControlled->bPantKurek3 ? mvControlled->bPantKurek3 ?
@@ -9308,6 +9360,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con
{ "pantalloff_sw:", ggPantAllDownButton }, { "pantalloff_sw:", ggPantAllDownButton },
{ "pantselected_sw:", ggPantSelectedButton }, { "pantselected_sw:", ggPantSelectedButton },
{ "pantselectedoff_sw:", ggPantSelectedDownButton }, { "pantselectedoff_sw:", ggPantSelectedDownButton },
{ "pantvalves_sw:", ggPantValvesButton },
{ "pantcompressor_sw:", ggPantCompressorButton }, { "pantcompressor_sw:", ggPantCompressorButton },
{ "pantcompressorvalve_sw:", ggPantCompressorValve }, { "pantcompressorvalve_sw:", ggPantCompressorValve },
{ "trainheating_sw:", ggTrainHeatingButton }, { "trainheating_sw:", ggTrainHeatingButton },

View File

@@ -190,6 +190,8 @@ class TTrain {
void set_paired_open_motor_connectors_button( bool const State ); void set_paired_open_motor_connectors_button( bool const State );
// helper, common part of pantograph selection methods // helper, common part of pantograph selection methods
void change_pantograph_selection( int const Change ); void change_pantograph_selection( int const Change );
// helper, common part of pantograh valves state update methods
void update_pantograph_valves();
// update function subroutines // update function subroutines
void update_sounds( double const Deltatime ); void update_sounds( double const Deltatime );
void update_sounds_runningnoise( sound_source &Sound ); void update_sounds_runningnoise( sound_source &Sound );
@@ -291,6 +293,8 @@ class TTrain {
static void OnCommand_pantographtoggleselected( TTrain *Train, command_data const &Command ); static void OnCommand_pantographtoggleselected( TTrain *Train, command_data const &Command );
static void OnCommand_pantographraiseselected( TTrain *Train, command_data const &Command ); static void OnCommand_pantographraiseselected( TTrain *Train, command_data const &Command );
static void OnCommand_pantographlowerselected( TTrain *Train, command_data const &Command ); static void OnCommand_pantographlowerselected( TTrain *Train, command_data const &Command );
static void OnCommand_pantographvalvesupdate( TTrain *Train, command_data const &Command );
static void OnCommand_pantographvalvesoff( TTrain *Train, command_data const &Command );
static void OnCommand_linebreakertoggle( TTrain *Train, command_data const &Command ); static void OnCommand_linebreakertoggle( TTrain *Train, command_data const &Command );
static void OnCommand_linebreakeropen( TTrain *Train, command_data const &Command ); static void OnCommand_linebreakeropen( TTrain *Train, command_data const &Command );
static void OnCommand_linebreakerclose( TTrain *Train, command_data const &Command ); static void OnCommand_linebreakerclose( TTrain *Train, command_data const &Command );
@@ -599,6 +603,7 @@ public: // reszta może by?publiczna
TGauge ggPantAllDownButton; TGauge ggPantAllDownButton;
TGauge ggPantSelectedButton; TGauge ggPantSelectedButton;
TGauge ggPantSelectedDownButton; TGauge ggPantSelectedDownButton;
TGauge ggPantValvesButton;
TGauge ggPantCompressorButton; TGauge ggPantCompressorButton;
TGauge ggPantCompressorValve; TGauge ggPantCompressorValve;
// Winger 020304 - wlacznik ogrzewania // Winger 020304 - wlacznik ogrzewania

View File

@@ -193,6 +193,8 @@ commanddescription_sequence Commands_descriptions = {
{ "pantographtoggleselected", command_target::vehicle }, { "pantographtoggleselected", command_target::vehicle },
{ "pantographraiseselected", command_target::vehicle }, { "pantographraiseselected", command_target::vehicle },
{ "pantographlowerselected", command_target::vehicle }, { "pantographlowerselected", command_target::vehicle },
{ "pantographvalvesupdate", command_target::vehicle },
{ "pantographvalvesoff", command_target::vehicle },
{ "heatingtoggle", command_target::vehicle }, { "heatingtoggle", command_target::vehicle },
{ "heatingenable", command_target::vehicle }, { "heatingenable", command_target::vehicle },
{ "heatingdisable", command_target::vehicle }, { "heatingdisable", command_target::vehicle },

View File

@@ -184,6 +184,8 @@ enum class user_command {
pantographtoggleselected, pantographtoggleselected,
pantographraiseselected, pantographraiseselected,
pantographlowerselected, pantographlowerselected,
pantographvalvesupdate,
pantographvalvesoff,
heatingtoggle, heatingtoggle,
heatingenable, heatingenable,
heatingdisable, heatingdisable,

View File

@@ -193,6 +193,8 @@ driverkeyboard_input::default_bindings() {
{ user_command::pantographtoggleselected, GLFW_KEY_O | keymodifier::shift | keymodifier::control }, { user_command::pantographtoggleselected, GLFW_KEY_O | keymodifier::shift | keymodifier::control },
// pantographraiseselected, // pantographraiseselected,
// pantographlowerselected, // pantographlowerselected,
// pantographvalvesupdate,
// pantographvalvesoff,
{ user_command::heatingtoggle, GLFW_KEY_H }, { user_command::heatingtoggle, GLFW_KEY_H },
// heatingenable, // heatingenable,
// heatingdisable, // heatingdisable,

View File

@@ -822,6 +822,9 @@ drivermouse_input::default_bindings() {
{ "pantselect_sw:", { { "pantselect_sw:", {
user_command::pantographselectnext, user_command::pantographselectnext,
user_command::pantographselectprevious } }, user_command::pantographselectprevious } },
{ "pantvalves_sw:", {
user_command::pantographvalvesupdate,
user_command::pantographvalvesoff } },
{ "pantcompressor_sw:", { { "pantcompressor_sw:", {
user_command::pantographcompressoractivate, user_command::pantographcompressoractivate,
user_command::none } }, user_command::none } },

View File

@@ -310,7 +310,6 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
// pliku} // pliku}
// ConversionError:=-7 {błąd niezgodności} // ConversionError:=-7 {błąd niezgodności}
TrainName = s; // nadanie nazwy z pliku TXT (bez ścieżki do pliku) TrainName = s; // nadanie nazwy z pliku TXT (bez ścieżki do pliku)
bool isCategory = false;
while (fin >> s || fin.bad()) while (fin >> s || fin.bad())
{ {
if (s.find("_______|") != std::string::npos) if (s.find("_______|") != std::string::npos)
@@ -318,30 +317,26 @@ bool TTrainParameters::LoadTTfile(std::string scnpath, int iPlus, double vmax)
break; break;
} }
if (s == "Kategoria") if (s == "Kategoria")
{
isCategory = true;
break;
}
} // while (!(s == "Seria"));
if (isCategory)
{ {
do do
{ {
fin >> s; fin >> s;
} while (!((s == "|") || (fin.bad()))); } while (!((s == "|") || (fin.bad())));
fin >> TrainCategory; fin >> TrainCategory;
continue;
} }
if (s == "Nazwa")
{
do
{
fin >> s;
} while (!((s == "|") || (fin.bad())));
fin >> TrainLabel;
continue;
}
} // while (!(s == "Seria"));
// else // else
{ /*czytaj naglowek*/ { /*czytaj naglowek*/
if (isCategory)
{
while (fin >> s || !fin.bad())
{
if (s.find("_______|") != std::string::npos)
break;
// fin >> s;
} // while (!(s.find("_______|") != std::string::npos) || fin.eof());
}
while (fin >> s || !fin.bad()) while (fin >> s || !fin.bad())
{ {
if (s == "[") if (s == "[")
@@ -647,6 +642,7 @@ void TTrainParameters::serialize( dictionary_source *Output ) const {
Output->insert( "trainnumber", TrainName ); Output->insert( "trainnumber", TrainName );
Output->insert( "traincategory", TrainCategory ); Output->insert( "traincategory", TrainCategory );
Output->insert( "trainname", TrainLabel );
Output->insert( "train_brakingmassratio", BrakeRatio ); Output->insert( "train_brakingmassratio", BrakeRatio );
Output->insert( "train_enginetype", LocSeries ); Output->insert( "train_enginetype", LocSeries );
Output->insert( "train_engineload", LocLoad ); Output->insert( "train_engineload", LocLoad );

View File

@@ -51,6 +51,7 @@ class TTrainParameters
public: public:
std::string TrainName; std::string TrainName;
std::string TrainCategory; std::string TrainCategory;
std::string TrainLabel;
double TTVmax; double TTVmax;
std::string Relation1; std::string Relation1;
std::string Relation2; // nazwy stacji danego odcinka std::string Relation2; // nazwy stacji danego odcinka

View File

@@ -300,6 +300,9 @@ void CSkyDome::RebuildColors() {
color.x = 0.20f * color.z; color.x = 0.20f * color.z;
color.y = 0.65f * color.z; color.y = 0.65f * color.z;
} }
// simple gradient, darkening towards the top
color *= clamp( ( 1.25f - vertex.y ), 0.f, 1.f );
// color *= ( 1.25f - vertex.y );
// gamma correction // gamma correction
color = glm::pow( color, gammacorrection ); color = glm::pow( color, gammacorrection );
/* /*
@@ -307,8 +310,6 @@ void CSkyDome::RebuildColors() {
color = glm::pow( color, glm::vec3( 2.2f ) - ( gammacorrection * 0.5f ) ); color = glm::pow( color, glm::vec3( 2.2f ) - ( gammacorrection * 0.5f ) );
} }
*/ */
// simple gradient, darkening towards the top
color *= ( 1.15f - vertex.y );
// save // save
m_colours[ i ] = color; m_colours[ i ] = color;
averagecolor += color; averagecolor += color;

View File

@@ -191,6 +191,7 @@ init() {
"second controller", "second controller",
"shunt mode power", "shunt mode power",
"tempomat", "tempomat",
"tempomat",
"tempomat (speed)", "tempomat (speed)",
"tempomat (speed)", "tempomat (speed)",
"tempomat (power)", "tempomat (power)",
@@ -303,6 +304,7 @@ init() {
"selected pantograph", "selected pantograph",
"selected pantograph", "selected pantograph",
"selected pantograph", "selected pantograph",
"selected pantograph",
"pantograph compressor", "pantograph compressor",
"pantograph 3-way valve", "pantograph 3-way valve",
"heating", "heating",
@@ -502,6 +504,7 @@ init() {
"nastawnik dodatkowy", "nastawnik dodatkowy",
"sterowanie analogowe", "sterowanie analogowe",
"tempomat", "tempomat",
"tempomat",
"tempomat (predkosc)", "tempomat (predkosc)",
"tempomat (predkosc)", "tempomat (predkosc)",
"tempomat (moc)", "tempomat (moc)",
@@ -614,6 +617,7 @@ init() {
"wybrany pantograf", "wybrany pantograf",
"wybrany pantograf", "wybrany pantograf",
"wybrany pantograf", "wybrany pantograf",
"wybrany pantograf",
"sprezarka pantografow", "sprezarka pantografow",
"kurek trojdrogowy pantografow", "kurek trojdrogowy pantografow",
"ogrzewanie pociagu", "ogrzewanie pociagu",
@@ -660,6 +664,7 @@ init() {
"scndctrl:", "scndctrl:",
"shuntmodepower:", "shuntmodepower:",
"tempomat_sw:", "tempomat_sw:",
"tempomatoff_sw:",
"speedinc_bt:", "speedinc_bt:",
"speeddec_bt:", "speeddec_bt:",
"speedctrlpowerinc_bt:", "speedctrlpowerinc_bt:",
@@ -772,6 +777,7 @@ init() {
"pantselected_sw:", "pantselected_sw:",
"pantselectedoff_sw:", "pantselectedoff_sw:",
"pantselect_sw:", "pantselect_sw:",
"pantvalves_sw:",
"pantcompressor_sw:", "pantcompressor_sw:",
"pantcompressorvalve_sw:", "pantcompressorvalve_sw:",
"trainheating_sw:", "trainheating_sw:",

View File

@@ -180,6 +180,7 @@ enum string {
cab_scndctrl, cab_scndctrl,
cab_shuntmodepower, cab_shuntmodepower,
cab_tempomat, cab_tempomat,
cab_tempomatoff,
cab_speedinc, cab_speedinc,
cab_speeddec, cab_speeddec,
cab_speedctrlpowerinc, cab_speedctrlpowerinc,
@@ -289,6 +290,7 @@ enum string {
cab_pantselected_sw, cab_pantselected_sw,
cab_pantselectedoff_sw, cab_pantselectedoff_sw,
cab_pantselect_sw, cab_pantselect_sw,
cab_pantvalves_sw,
cab_pantcompressor_sw, cab_pantcompressor_sw,
cab_pantcompressorvalve_sw, cab_pantcompressorvalve_sw,
cab_trainheating_sw, cab_trainheating_sw,

View File

@@ -1,5 +1,5 @@
#pragma once #pragma once
#define VERSION_MAJOR 21 #define VERSION_MAJOR 21
#define VERSION_MINOR 330 #define VERSION_MINOR 331
#define VERSION_REVISION 0 #define VERSION_REVISION 0