mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-01 13:44:49 +01:00
feat(track): 3D sleepers and switch timbers, blade heel and throw from templates, one rail carving pass
- sleepers3d / sleepers3dplain / sleepers3dbed in eu07.ini: timbers put together from the begin, main and end parts of a model and stretched to their length, plain sleepers of their own model; tracks whose plain sleepers would touch are laid as one cluster, lines of timbers led by priority and turned to the bisectors of frogs and crossings at a limited rate, whole timbers under crossings, split ones between tracks with room to part them, gaps filled per rail and overlaps shortened or dropped; clusters worked out in a background thread while driving, on demand in the editor - the ballast can be left out under the beams (sleepers3dbed no) - blades get their heel and throw from the switch template or blades <heel> <throw> in the scenery; blades of double switches run on into the track linking them to the next switch - rail cutting at frogs, wing rails, movable noses and switch crossings done by one carving pass (RailCarve) - tint of the rail treads applied to the colour only, without the matte band at the frog - a switch trailed through with a movable nose set the other way derails the vehicle - self-tests: sleepercheck, sharedzones, beamsnear, throw, sleepersbg
This commit is contained in:
@@ -589,6 +589,40 @@ bool global_settings::ConfigParseSimulation(cParser& Parser, const std::string&
|
||||
return true;
|
||||
}
|
||||
|
||||
if (token == "sleepers3d")
|
||||
{
|
||||
// model of the sleepers and switch timbers, put together from its submodels begin, main and end; none: no such sleepers
|
||||
ParseOne(Parser, Sleepers3D);
|
||||
if (Sleepers3D == "none")
|
||||
{
|
||||
Sleepers3D.clear();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (token == "sleepers3dbed")
|
||||
{
|
||||
// the ballast under the tracks with 3D sleepers; no: the sleepers are laid on the ground alone
|
||||
ParseOne(Parser, Sleepers3DBed);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (token == "sleepers3dplain")
|
||||
{
|
||||
// model, skin and the height of the rail seat of the sleepers of a track running alone, square to it; none: the timbers of sleepers3d there too
|
||||
Parser.getTokens(3, false);
|
||||
Parser >> Sleepers3DPlain >> Sleepers3DPlainSkin >> Sleepers3DPlainSeat;
|
||||
if (Sleepers3DPlain == "none")
|
||||
{
|
||||
Sleepers3DPlain.clear();
|
||||
}
|
||||
if (Sleepers3DPlainSkin == "none")
|
||||
{
|
||||
Sleepers3DPlainSkin.clear();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (token == "createswitchtrackbeds")
|
||||
{
|
||||
ParseOne(Parser, CreateSwitchTrackbeds);
|
||||
@@ -1605,6 +1639,9 @@ global_settings::export_as_text( std::ostream &Output ) const {
|
||||
export_as_text( Output, "smoothtraction", bSmoothTraction );
|
||||
export_as_text( Output, "splinefidelity", SplineFidelity );
|
||||
export_as_text( Output, "sleeperdistance", SleeperDistance );
|
||||
export_as_text( Output, "sleepers3d", ( Sleepers3D.empty() ? std::string{ "none" } : Sleepers3D ) );
|
||||
export_as_text( Output, "sleepers3dbed", Sleepers3DBed );
|
||||
Output << "sleepers3dplain " << ( Sleepers3DPlain.empty() ? std::string{ "none" } : Sleepers3DPlain ) << ' ' << ( Sleepers3DPlainSkin.empty() ? std::string{ "none" } : Sleepers3DPlainSkin ) << ' ' << Sleepers3DPlainSeat << '\n';
|
||||
export_as_text( Output, "rendercab", render_cab );
|
||||
export_as_text( Output, "createswitchtrackbeds", CreateSwitchTrackbeds );
|
||||
export_as_text( Output, "gfx.resource.sweep", ResourceSweep );
|
||||
|
||||
Reference in New Issue
Block a user