mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-11-01 10:22:09 +01:00
Usage, optional attributes of a track entry, before endtrack:
uneven <mm> peak deviation of a rail on a 10 m chord, 0-100; normal and switch
unevenup <mm> up and down alone, instead of uneven; normal and switch
unevenside <mm> sideways alone, instead of uneven; normal and switch
unevencross <mm> cross level alone, instead of uneven; normal only
jointdip <mm> depth of the dip at rail joints, every sound distance; normal only,
default 0.4 of the up and down component
Values of uneven follow PLK Id-14 appendix 1: 6 mm is the limit at 160 km/h, 10 at 120,
18 at 80, 35 at 40; half of it for a track in a good state. Example:
uneven 18
unevencross 25
jointdip 6
endtrack
The same fields are in the editor, track panel, section Ride and sound. See
track_uneven_doc.md.
The unevenness is a displacement field over the plan of the scenery, with no random
numbers: one place strays the same every time, and joined tracks, the paths of a switch,
sleepermodel and axles at one place move together. Tracks meet at a joint at the lower of
their values. Joined switches take the lowest of theirs, the tracks joined to them come to
it, and a track with none of a component keeps the switch to its design in it. The clatter
comes from the dipping joints. Curve radius and grade for the physics stay as designed.
Tracks with it get geometry every 2 m on straights: 4x the vertices on Baltyk with all
tracks flagged, 0.2 ms more per frame on td.scn.
68 lines
2.7 KiB
C++
68 lines
2.7 KiB
C++
/*
|
|
This Source Code Form is subject to the
|
|
terms of the Mozilla Public License, v.
|
|
2.0. If a copy of the MPL was not
|
|
distributed with this file, You can
|
|
obtain one at
|
|
http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#ifndef TrkFollH
|
|
#define TrkFollH
|
|
|
|
#include "utilities/Classes.h"
|
|
#include "world/Segment.h"
|
|
|
|
// oś poruszająca się po torze
|
|
class TTrackFollower {
|
|
|
|
public:
|
|
// constructors
|
|
TTrackFollower() = default;
|
|
// destructor
|
|
~TTrackFollower();
|
|
// methods
|
|
TTrack * SetCurrentTrack(TTrack *pTrack, int end);
|
|
bool Move(double fDistance, bool bPrimary);
|
|
inline TTrack * GetTrack() const {
|
|
return pCurrentTrack; };
|
|
// przechyłka policzona przy ustalaniu pozycji
|
|
inline double GetRoll() {
|
|
return vAngles.x; };
|
|
//{return pCurrentSegment->GetRoll(fCurrentDistance)*fDirection;}; //zamiast liczyć można pobrać
|
|
// zwrot na torze
|
|
inline double GetDirection() const {
|
|
return fDirection; };
|
|
// ABu-030403
|
|
inline double GetTranslation() const {
|
|
return fCurrentDistance; };
|
|
// inline double GetLength(vector3 p1, vector3 cp1, vector3 cp2, vector3 p2)
|
|
//{ return pCurrentSegment->ComputeLength(p1,cp1,cp2,p2); };
|
|
// inline double GetRadius(double L, double d); //McZapkie-150503
|
|
inline glm::dvec3 UnevenBend() const {
|
|
return pCurrentSegment ? pCurrentSegment->uneven_bend( fCurrentDistance ) : glm::dvec3 { 0.0 }; };
|
|
// TTrack::rail_phase of the point Offset ahead of the axle along the vehicle
|
|
double RailPhase( double const Offset ) const;
|
|
bool Init(TTrack *pTrack, TDynamicObject *NewOwner, double fDir);
|
|
void Reset();
|
|
void Render(float fNr);
|
|
// members
|
|
double fOffsetH = 0.0; // Ra: odległość środka osi od osi toru (dla samochodów) - użyć do wężykowania
|
|
glm::dvec3 pPosition; // współrzędne XYZ w układzie scenerii
|
|
glm::vec3 vAngles; // x:przechyłka, y:pochylenie, z:kierunek w planie (w radianach)
|
|
private:
|
|
// methods
|
|
bool ComputatePosition(); // przeliczenie pozycji na torze
|
|
// members
|
|
TTrack *pCurrentTrack = nullptr; // na którym torze siê znajduje
|
|
std::shared_ptr<TSegment> pCurrentSegment; // zwrotnice mog¹ mieæ dwa segmenty
|
|
double fCurrentDistance = 0.0; // przesuniêcie wzglêdem Point1 w stronê Point2
|
|
double fDirection = 1.0; // ustawienie wzglêdem toru: -1.0 albo 1.0, mno¿one przez dystans // jest przodem do Point2
|
|
TDynamicObject *Owner = nullptr; // pojazd posiadający
|
|
int iEventFlag = 0; // McZapkie-020602: informacja o tym czy wyzwalac zdarzenie: 0,1,2,3
|
|
int iEventallFlag = 0;
|
|
int iSegment = 0; // który segment toru jest używany (żeby nie przeskakiwało po przestawieniu zwrotnicy pod taborem)
|
|
};
|
|
//---------------------------------------------------------------------------
|
|
#endif
|