16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-19 13:29:18 +02:00

Change clang format

Add AlignTrailingComments: false
Add AllowShortFunctionsOnASingleLine: Empty
This commit is contained in:
Firleju
2015-04-29 12:55:45 +02:00
parent ef4e168c68
commit cd571c71ea
71 changed files with 1580 additions and 1106 deletions

View File

@@ -54,7 +54,7 @@ void TAnimPant::AKP_4E()
fLenL1 = 1.22; // 1.176289 w modelach
fLenU1 = 1.755; // 1.724482197 w modelach
fHoriz = 0.535; // 0.54555075 przesunięcie ślizgu w długości pojazdu względem osi obrotu dolnego
// ramienia
// ramienia
fHeight = 0.07; // wysokość ślizgu ponad oś obrotu
fWidth = 0.635; // połowa szerokości ślizgu, 0.635 dla AKP-1 i AKP-4E
fAngleL0 = DegToRad(2.8547285515689267247882521833308);
@@ -68,7 +68,7 @@ void TAnimPant::AKP_4E()
hvPowerWire = NULL;
fWidthExtra = 0.381; //(2.032m-1.027)/2
// poza obszarem roboczym jest aproksymacja łamaną o 5 odcinkach
fHeightExtra[0] = 0.0; //+0.0762
fHeightExtra[0] = 0.0; //+0.0762
fHeightExtra[1] = -0.01; //+0.1524
fHeightExtra[2] = -0.03; //+0.2286
fHeightExtra[3] = -0.07; //+0.3048
@@ -131,7 +131,8 @@ TAnim::~TAnim()
break;
}
};
void TAnim::Parovoz(){// animowanie tłoka i rozrządu parowozu
void TAnim::Parovoz(){
// animowanie tłoka i rozrządu parowozu
};
//---------------------------------------------------------------------------
TDynamicObject *__fastcall TDynamicObject::FirstFind(int &coupler_nr)
@@ -288,7 +289,10 @@ TDynamicObject* TDynamicObject::GetFirstCabDynamic(int cpl_type)
};
*/
void TDynamicObject::ABuSetModelShake(vector3 mShake) { modelShake = mShake; };
void TDynamicObject::ABuSetModelShake(vector3 mShake)
{
modelShake = mShake;
};
int TDynamicObject::GetPneumatic(bool front, bool red)
{
@@ -413,7 +417,7 @@ void TDynamicObject::UpdateDoorRotate(TAnim *pAnim)
{ // animacja drzwi - obrót
if (pAnim->smAnimated)
{ // if (MoverParameters->DoorOpenMethod==2) //obrotowe albo dwójłomne (trzeba kombinowac
// submodelami i ShiftL=90,R=180)
// submodelami i ShiftL=90,R=180)
if (pAnim->iNumber & 1)
pAnim->smAnimated->SetRotate(float3(1, 0, 0), dDoorMoveR);
else
@@ -425,7 +429,7 @@ void TDynamicObject::UpdateDoorFold(TAnim *pAnim)
{ // animacja drzwi - obrót
if (pAnim->smAnimated)
{ // if (MoverParameters->DoorOpenMethod==2) //obrotowe albo dwójłomne (trzeba kombinowac
// submodelami i ShiftL=90,R=180)
// submodelami i ShiftL=90,R=180)
if (pAnim->iNumber & 1)
{
pAnim->smAnimated->SetRotate(float3(0, 0, 1), dDoorMoveR);
@@ -849,7 +853,7 @@ void __inline TDynamicObject::ABuLittleUpdate(double ObjSqrDist)
}
if (MoverParameters->Battery)
{ // sygnały czoła pociagu //Ra: wyświetlamy bez ograniczeń odległości, by były widoczne z
// daleka
// daleka
if (TestFlag(iLights[0], 1))
{
btHeadSignals11.TurnOn();
@@ -899,7 +903,7 @@ TDynamicObject *__fastcall TDynamicObject::ABuFindNearestObject(TTrack *Track,
TDynamicObject *MyPointer,
int &CouplNr)
{ // zwraca wskaznik do obiektu znajdujacego sie na torze (Track), którego sprzęg jest najblizszy
// kamerze
// kamerze
// służy np. do łączenia i rozpinania sprzęgów
// WE: Track - tor, na ktorym odbywa sie poszukiwanie
// MyPointer - wskaznik do obiektu szukajacego
@@ -926,7 +930,7 @@ TDynamicObject *__fastcall TDynamicObject::ABuFindNearestObject(TTrack *Track,
{ // wektor [kamera-sprzeg0], potem [kamera-sprzeg1]
// Powinno byc wyliczone, ale nie zaszkodzi drugi raz:
//(bo co, jesli nie wykonuje sie obrotow wozkow?) - Ra: ale zawsze są liczone
//współrzędne sprzęgów
// współrzędne sprzęgów
// Track->Dynamics[i]->modelRot.z=ABuAcos(Track->Dynamics[i]->Axle0.pPosition-Track->Dynamics[i]->Axle1.pPosition);
// poz=Track->Dynamics[i]->vPosition; //pozycja środka pojazdu
// kon=vector3( //położenie przodu względem środka
@@ -1101,7 +1105,7 @@ TDynamicObject *__fastcall TDynamicObject::ABuFindObject(TTrack *Track, int Scan
0; // to, bo (ScanDir>=0)
if (Track->iCategoryFlag & 254) // trajektoria innego typu niż tor kolejowy
{ // dla torów nie ma sensu tego sprawdzać, rzadko co jedzie po jednej
// szynie i się mija
// szynie i się mija
// Ra: mijanie samochodów wcale nie jest proste
// Przesuniecie wzgledne pojazdow. Wyznaczane, zeby sprawdzic,
// czy pojazdy faktycznie sie zderzaja (moga byc przesuniete
@@ -1120,7 +1124,7 @@ TDynamicObject *__fastcall TDynamicObject::ABuFindObject(TTrack *Track, int Scan
if (RelOffsetH + RelOffsetH >
MoverParameters->Dim.W + Track->Dynamics[i]->MoverParameters->Dim.W)
continue; // odległość większa od połowy sumy szerokości - kolizji
// nie będzie
// nie będzie
// jeśli zahaczenie jest niewielkie, a jest miejsce na poboczu, to
// zjechać na pobocze
}
@@ -1147,7 +1151,7 @@ TDynamicObject *__fastcall TDynamicObject::ABuFindObject(TTrack *Track, int Scan
1; // odwrotnie, bo (ScanDir<0)
if (Track->iCategoryFlag & 254) // trajektoria innego typu niż tor kolejowy
{ // dla torów nie ma sensu tego sprawdzać, rzadko co jedzie po jednej
// szynie i się mija
// szynie i się mija
// Ra: mijanie samochodów wcale nie jest proste
// Przesunięcie względne pojazdów. Wyznaczane, żeby sprawdzić,
// czy pojazdy faktycznie się zderzają (mogą być przesunięte
@@ -1166,7 +1170,7 @@ TDynamicObject *__fastcall TDynamicObject::ABuFindObject(TTrack *Track, int Scan
if (RelOffsetH + RelOffsetH >
MoverParameters->Dim.W + Track->Dynamics[i]->MoverParameters->Dim.W)
continue; // odległość większa od połowy sumy szerokości - kolizji
// nie będzie
// nie będzie
}
iMinDist = i; // potencjalna kolizja
MinDist = TestDist; // odleglość pomiędzy aktywnymi osiami pojazdów
@@ -1175,7 +1179,7 @@ TDynamicObject *__fastcall TDynamicObject::ABuFindObject(TTrack *Track, int Scan
}
}
dist += MinDist; // doliczenie odległości przeszkody albo długości odcinka do przeskanowanej
// odległości
// odległości
return (iMinDist >= 0) ? Track->Dynamics[iMinDist] : NULL;
}
dist += Track->Length(); // doliczenie długości odcinka do przeskanowanej odległości
@@ -1227,7 +1231,7 @@ void TDynamicObject::CouplersDettach(double MinDist, int MyScanDir)
if ((PrevConnectedNo ? PrevConnected->NextConnected :
PrevConnected->PrevConnected) == this)
{ // Ra: nie rozłączamy znalezionego, jeżeli nie do nas podłączony (może jechać w
// innym kierunku)
// innym kierunku)
PrevConnected->MoverParameters->Couplers[PrevConnectedNo].Connected = NULL;
if (PrevConnectedNo == 0)
{
@@ -1257,7 +1261,7 @@ void TDynamicObject::CouplersDettach(double MinDist, int MyScanDir)
if ((NextConnectedNo ? NextConnected->NextConnected :
NextConnected->PrevConnected) == this)
{ // Ra: nie rozłączamy znalezionego, jeżeli nie do nas podłączony (może jechać w
// innym kierunku)
// innym kierunku)
NextConnected->MoverParameters->Couplers[NextConnectedNo].Connected = NULL;
if (NextConnectedNo == 0)
{
@@ -1289,7 +1293,7 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist)
FirstAxle->GetTrack(); // tor na którym "stoi" skrajny wózek (może być inny niż tor pojazdu)
if (FirstAxle->GetDirection() < 0) // czy oś jest ustawiona w stronę Point1?
ScanDir = -ScanDir; // jeśli tak, to kierunek szukania będzie przeciwny (teraz względem
// toru)
// toru)
Byte MyCouplFound; // numer sprzęgu do podłączenia w obiekcie szukajacym
MyCouplFound = (MyScanDir < 0) ? 1 : 0;
Byte CouplFound; // numer sprzęgu w znalezionym obiekcie (znaleziony wypełni)
@@ -1511,7 +1515,7 @@ TDynamicObject::TDynamicObject()
cp1 = cp2 = sp1 = sp2 = 0;
iDirection = 1; // stoi w kierunku tradycyjnym (0, gdy jest odwrócony)
iAxleFirst = 0; // numer pierwszej osi w kierunku ruchu (przełączenie następuje, gdy osie sa na
// tym samym torze)
// tym samym torze)
iInventory = 0; // flagi bitowe posiadanych submodeli (zaktualizuje się po wczytaniu MMD)
RaLightsSet(0, 0); // początkowe zerowanie stanu świateł
// Ra: domyślne ilości animacji dla zgodności wstecz (gdy brak ilości podanych w MMD)
@@ -1536,7 +1540,7 @@ TDynamicObject::TDynamicObject()
fScanDist = 300.0; // odległość skanowania, zwiększana w trybie łączenia
ctOwner = NULL; // na początek niczyj
iOverheadMask = 0; // maska przydzielana przez AI pojazdom posiadającym pantograf, aby wymuszały
// jazdę bezprądową
// jazdę bezprądową
tmpTraction.TractionVoltage =
0; // Ra 2F1H: prowizorka, trzeba przechować napięcie, żeby nie wywalało WS pod izolatorem
fAdjustment = 0.0; // korekcja odległości pomiędzy wózkami (np. na łukach)
@@ -1651,7 +1655,7 @@ double TDynamicObject::Init(
int dlugosc = MoreParams.Length();
ActPar = MoreParams.SubString(1, kropka - 1).UpperCase(); // pierwszy parametr;
MoreParams = MoreParams.SubString(kropka + 1, dlugosc - kropka); // reszta do dalszej
// obrobki
// obrobki
kropka = MoreParams.Pos(".");
if (ActPar.SubString(1, 1) == "B") // jesli hamulce
@@ -1780,13 +1784,13 @@ double TDynamicObject::Init(
{ // ustawianie samochodow na poboczu albo na środku drogi
if (Track->fTrackWidth < 3.5) // jeśli droga wąska
MoverParameters->OffsetTrackH = 0.0; // to stawiamy na środku, niezależnie od stanu
// ruchu
// ruchu
else if (driveractive) // od 3.5m do 8.0m jedzie po środku pasa, dla szerszych w odległości
// 1.5m
// 1.5m
MoverParameters->OffsetTrackH =
Track->fTrackWidth <= 8.0 ? -Track->fTrackWidth * 0.25 : -1.5;
else // jak stoi, to kołem na poboczu i pobieramy szerokość razem z poboczem, ale nie z
// chodnikiem
// chodnikiem
MoverParameters->OffsetTrackH =
-0.5 * (Track->WidthTotal() - MoverParameters->Dim.W) + 0.05;
iHornWarning = 0; // nie będzie trąbienia po podaniu zezwolenia na jazdę
@@ -1889,7 +1893,7 @@ double TDynamicObject::Init(
smBuforPrawy[i]->WillBeAnimated();
}
for (int i = 0; i < iAxles; i++) // wyszukiwanie osi (0 jest na końcu, dlatego dodajemy
// długość?)
// długość?)
dRailPosition[i] =
(Reversed ? -dWheelsPosition[i] : (dWheelsPosition[i] + MoverParameters->Dim.L)) +
fDist;
@@ -1943,7 +1947,7 @@ double TDynamicObject::Init(
break;
}
Move(0.0001); // potrzebne do wyliczenia aktualnej pozycji; nie może być zero, bo nie przeliczy
// pozycji
// pozycji
// teraz jeszcze trzeba przypisać pojazdy do nowego toru, bo przesuwanie początkowe osi nie
// zrobiło tego
ABuCheckMyTrack(); // zmiana toru na ten, co oś Axle0 (oś z przodu)
@@ -2009,11 +2013,11 @@ void TDynamicObject::Move(double fDistance)
bEnabled &= Axle1.Move(fDistance, iAxleFirst); // oś z tyłu pojazdu prusza się pierwsza
bEnabled &= Axle0.Move(fDistance /*-fAdjustment*/, !iAxleFirst); // oś z przodu pojazdu
}
else //gf: bez wywolania Move na postoju nie ma event0
{
bEnabled&=Axle1.Move(fDistance,iAxleFirst); //oś z tyłu pojazdu prusza się pierwsza
bEnabled&=Axle0.Move(fDistance,!iAxleFirst); //oś z przodu pojazdu
}
else // gf: bez wywolania Move na postoju nie ma event0
{
bEnabled &= Axle1.Move(fDistance, iAxleFirst); // oś z tyłu pojazdu prusza się pierwsza
bEnabled &= Axle0.Move(fDistance, !iAxleFirst); // oś z przodu pojazdu
}
if (fDistance != 0.0) // nie liczyć ponownie, jeśli stoi
{ // liczenie pozycji pojazdu tutaj, bo jest używane w wielu miejscach
vPosition = 0.5 * (Axle1.pPosition + Axle0.pPosition); //środek między skrajnymi osiami
@@ -2049,7 +2053,7 @@ void TDynamicObject::Move(double fDistance)
}
mMatrix.Identity(); // to też można by od razu policzyć, ale potrzebne jest do wyświetlania
mMatrix.BasisChange(vLeft, vUp, vFront); // przesuwanie jest jednak rzadziej niż
// renderowanie
// renderowanie
mMatrix =
Inverse(mMatrix); // wyliczenie macierzy dla pojazdu (potrzebna tylko do wyświetlania?)
// if (MoverParameters->CategoryFlag&2)
@@ -2076,7 +2080,7 @@ void TDynamicObject::Move(double fDistance)
TTrack *t0 = Axle0.GetTrack(); // już po przesunięciu
TTrack *t1 = Axle1.GetTrack();
if ((t0->eEnvironment == e_flat) && (t1->eEnvironment == e_flat)) // może być
// e_bridge...
// e_bridge...
fShade = 0.0; // standardowe oświetlenie
else
{ // jeżeli te tory mają niestandardowy stopień zacienienia (e_canyon, e_tunnel)
@@ -2171,11 +2175,11 @@ void TDynamicObject::AttachPrev(TDynamicObject *Object, int iType)
if ((MoverParameters->Power < 1.0) &&
(Object->MoverParameters->Power > 1.0)) // my nie mamy mocy, ale ten drugi ma
iLights = Object->MoverParameters->iLights; // to w tym z mocą będą światła
// załączane, a w tym bez tylko widoczne
// załączane, a w tym bez tylko widoczne
else if ((MoverParameters->Power > 1.0) &&
(Object->MoverParameters->Power < 1.0)) // my mamy moc, ale ten drugi nie ma
Object->iLights = MoverParameters->iLights; // to w tym z mocą będą światła
// załączane, a w tym bez tylko widoczne
// załączane, a w tym bez tylko widoczne
return;
// SetPneumatic(1,1); //Ra: to i tak się nie wykonywało po return
// SetPneumatic(1,0);
@@ -2337,10 +2341,10 @@ bool TDynamicObject::Update(double dt, double dt1)
// if ((!MoverParameters->PantCompFlag)&&(MoverParameters->CompressedVolume>=2.8))
// MoverParameters->PantVolume=MoverParameters->CompressedVolume;
if (MoverParameters->PantPress < (MoverParameters->TrainType == dt_EZT ? 2.4 : 3.5))
{ // 3.5 wg http://www.transportszynowy.pl/eu06-07pneumat.php
{ // 3.5 wg http://www.transportszynowy.pl/eu06-07pneumat.php
//"Wyłączniki ciśnieniowe odbieraków prądu wyłączają sterowanie wyłącznika szybkiego
//oraz uniemożliwiają podniesienie odbieraków prądu, gdy w instalacji rozrządu
//ciśnienie spadnie poniżej wartości 3,5 bara."
// oraz uniemożliwiają podniesienie odbieraków prądu, gdy w instalacji rozrządu
// ciśnienie spadnie poniżej wartości 3,5 bara."
// Ra 2013-12: Niebugocław mówi, że w EZT podnoszą się przy 2.5
// if (!MoverParameters->PantCompFlag)
// MoverParameters->PantVolume=MoverParameters->CompressedVolume;
@@ -2375,7 +2379,7 @@ bool TDynamicObject::Update(double dt, double dt1)
ts.R = -0.5 * MoverParameters->BDist / sin(ts.R * 0.5);
if ((ts.R > 15000.0) || (ts.R < -15000.0))
ts.R = 0.0; // szkoda czasu na zbyt duże promienie, 4km to promień nie wymagający
// przechyłki
// przechyłki
}
else
ts.R = 0.0;
@@ -2383,7 +2387,7 @@ bool TDynamicObject::Update(double dt, double dt1)
// Ra: składową pochylenia wzdłużnego mamy policzoną w jednostkowym wektorze vFront
ts.Len = 1.0; // Max0R(MoverParameters->BDist,MoverParameters->ADist);
ts.dHtrack = -vFront.y; // Axle1.pPosition.y-Axle0.pPosition.y; //wektor między skrajnymi osiami
// (!!!odwrotny)
// (!!!odwrotny)
ts.dHrail = (Axle1.GetRoll() + Axle0.GetRoll()) * 0.5; //średnia przechyłka pudła
// TTrackParam tp;
tp.Width = MyTrack->fTrackWidth;
@@ -2447,14 +2451,14 @@ bool TDynamicObject::Update(double dt, double dt1)
*/
NoVoltTime = NoVoltTime + dt;
if (NoVoltTime > 0.2) // jeśli brak zasilania dłużej niż 0.2 sekundy (25km/h pod
// izolatorem daje 0.15s)
// izolatorem daje 0.15s)
{ // Ra 2F1H: prowizorka, trzeba przechować napięcie, żeby nie wywalało WS pod
// izolatorem
// izolatorem
if (MoverParameters->Vel > 0.5) // jeśli jedzie
if (MoverParameters->PantFrontUp ||
MoverParameters->PantRearUp) // Ra 2014-07: doraźna blokada logowania
// zimnych lokomotyw - zrobić to trzeba
// inaczej
// zimnych lokomotyw - zrobić to trzeba
// inaczej
// if (NoVoltTime>0.02) //tu można ograniczyć czas rozłączenia
// if (DebugModeFlag) //logowanie nie zawsze
if (MoverParameters->Mains)
@@ -2744,7 +2748,7 @@ bool TDynamicObject::Update(double dt, double dt1)
if (pants[0].fParamPants->hvPowerWire &&
pants[1].fParamPants->hvPowerWire) // i oba podłączone do drutów
fPantCurrent = fCurrent * 0.5; // to dzielimy prąd równo na oba (trochę bez
// sensu, ale lepiej tak niż podwoić prąd)
// sensu, ale lepiej tak niż podwoić prąd)
for (int i = 0; i < iAnimType[ANIM_PANTS]; ++i)
{ // pętla po wszystkich pantografach
p = pants[i].fParamPants;
@@ -2780,7 +2784,7 @@ bool TDynamicObject::Update(double dt, double dt1)
(MoverParameters->PantRearVolt == 0.0))
sPantUp.Play(vol, 0, MechInside, vPosition);
if (p->hvPowerWire) // TODO: wyliczyć trzeba prąd przypadający na pantograf i
// wstawić do GetVoltage()
// wstawić do GetVoltage()
{
MoverParameters->PantFrontVolt =
p->hvPowerWire->VoltageGet(MoverParameters->Voltage, fPantCurrent);
@@ -2804,7 +2808,7 @@ bool TDynamicObject::Update(double dt, double dt1)
(MoverParameters->PantFrontVolt == 0.0))
sPantUp.Play(vol, 0, MechInside, vPosition);
if (p->hvPowerWire) // TODO: wyliczyć trzeba prąd przypadający na pantograf i
// wstawić do GetVoltage()
// wstawić do GetVoltage()
{
MoverParameters->PantRearVolt =
p->hvPowerWire->VoltageGet(MoverParameters->Voltage, fPantCurrent);
@@ -2833,7 +2837,7 @@ bool TDynamicObject::Update(double dt, double dt1)
{
if (PantDiff > 0.001) // jeśli nie dolega do drutu
{ // jeśli poprzednia wysokość jest mniejsza niż pożądana, zwiększyć kąt dolnego
// ramienia zgodnie z ciśnieniem
// ramienia zgodnie z ciśnieniem
if (pantspeedfactor >
0.55 * PantDiff) // 0.55 to około pochodna kąta po wysokości
k += 0.55 * PantDiff; // ograniczenie "skoku" w danej klatce
@@ -2889,7 +2893,7 @@ bool TDynamicObject::Update(double dt, double dt1)
{ // to coś wyłączało dźwięk silnika w ST43!
MoverParameters->ConverterFlag = false;
MoverParameters->CompressorFlag = false; // Ra: to jest wątpliwe - wyłączenie
// sprężarki powinno być w jednym miejscu!
// sprężarki powinno być w jednym miejscu!
}
}
}
@@ -3013,7 +3017,7 @@ bool TDynamicObject::Update(double dt, double dt1)
else
{
CouplCounter = 25; // a bezruch nie, ale trzeba zaktualizować odległość, bo zawalidroga może
// sobie pojechać
// sobie pojechać
}
if (MoverParameters->DerailReason > 0)
{
@@ -3366,7 +3370,7 @@ void TDynamicObject::RenderSounds()
if ((MoverParameters->DynamicBrakeFlag) && (MoverParameters->EnginePower > 0.1) &&
(MoverParameters->EngineType ==
ElectricSeriesMotor)) // Szociu - 29012012 - jeżeli uruchomiony jest hamulec
// elektrodynamiczny, odtwarzany jest dźwięk silnika
// elektrodynamiczny, odtwarzany jest dźwięk silnika
vol += 0.8;
if (enginevolume > 0.0001)
@@ -3601,7 +3605,7 @@ void TDynamicObject::RenderSounds()
if (MoverParameters->DoorClosureWarning)
{
if (MoverParameters->DepartureSignal) // NBMX sygnal odjazdu, MC: pod warunkiem ze jest
// zdefiniowane w chk
// zdefiniowane w chk
sDepartureSignal.TurnOn(MechInside, GetPosition());
else
sDepartureSignal.TurnOff(MechInside, GetPosition());
@@ -3755,7 +3759,7 @@ void TDynamicObject::RenderAlpha()
// McZapkie-250202
// wczytywanie pliku z danymi multimedialnymi (dzwieki)
void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
AnsiString ReplacableSkin)
AnsiString ReplacableSkin)
{
double dSDist;
TFileStream *fs;
@@ -3806,7 +3810,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
}
if ((i = asModel.Pos(",")) > 0)
{ // Ra 2015-01: może szukać przecinka w nazwie modelu, a po przecinku była by liczba
// tekstur?
// tekstur?
if (i < asModel.Length())
iMultiTex = asModel[i + 1] - '0';
if (iMultiTex < 0)
@@ -3866,7 +3870,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
if (!ReplacableSkin.IsEmpty())
{ // próba wycięcia trzeciej nazwy
iMultiTex = -4; // skoro zostało coś po kresce, to są co
// najmniej cztery
// najmniej cztery
ReplacableSkinID[-iMultiTex] =
TTexturesManager::GetTextureID(
NULL, NULL,
@@ -3902,7 +3906,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
Global::iDynamicFiltering);
if (ReplacableSkinID[4])
iMultiTex = 4; // jak są cztery, to blokujemy podmianę tekstury
// rozkładem
// rozkładem
}
}
}
@@ -3918,22 +3922,22 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
NULL, NULL, ReplacableSkin.c_str(), Global::iDynamicFiltering);
if (TTexturesManager::GetAlpha(ReplacableSkinID[1]))
iAlpha = 0x31310031; // tekstura -1 z kanałem alfa - nie renderować w cyklu
// nieprzezroczystych
// nieprzezroczystych
else
iAlpha = 0x30300030; // wszystkie tekstury nieprzezroczyste - nie renderować w
// cyklu przezroczystych
// cyklu przezroczystych
if (ReplacableSkinID[2])
if (TTexturesManager::GetAlpha(ReplacableSkinID[2]))
iAlpha |= 0x02020002; // tekstura -2 z kanałem alfa - nie renderować w cyklu
// nieprzezroczystych
// nieprzezroczystych
if (ReplacableSkinID[3])
if (TTexturesManager::GetAlpha(ReplacableSkinID[3]))
iAlpha |= 0x04040004; // tekstura -3 z kanałem alfa - nie renderować w cyklu
// nieprzezroczystych
// nieprzezroczystych
if (ReplacableSkinID[4])
if (TTexturesManager::GetAlpha(ReplacableSkinID[4]))
iAlpha |= 0x08080008; // tekstura -4 z kanałem alfa - nie renderować w cyklu
// nieprzezroczystych
// nieprzezroczystych
}
// Winger 040304 - ladowanie przedsionkow dla EZT
if (MoverParameters->TrainType == dt_EZT)
@@ -3984,7 +3988,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
str = Parser->GetNextSymbol().LowerCase();
if (str == AnsiString("animations:"))
{ // Ra: ustawienie ilości poszczególnych animacji - musi być jako pierwsze, inaczej
// ilości będą domyślne
// ilości będą domyślne
if (!pAnimations)
{ // jeśli nie ma jeszcze tabeli animacji, można odczytać nowe ilości
int co = 0, ile;
@@ -3992,7 +3996,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
do
{ // kolejne liczby to ilość animacj, -1 to znacznik końca
ile = Parser->GetNextSymbol().ToIntDef(-1); // ilość danego typu
// animacji
// animacji
// if (co==ANIM_PANTS)
// if (!Global::bLoadTraction)
// if (!DebugModeFlag) //w debugmode pantografy mają "niby działać"
@@ -4030,7 +4034,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
if (j == ANIM_PANTS) // zliczamy poprzednie animacje
if (!pants)
if (iAnimType[ANIM_PANTS]) // o ile jakieś pantografy są (a
// domyślnie są)
// domyślnie są)
pants = pAnimations +
k; // zapamiętanie na potrzeby wyszukania submodeli
pAnimations[k].iShift = sm; // przesunięcie do przydzielenia wskaźnika
@@ -4082,7 +4086,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
if (pAnimations[i].smAnimated)
{ //++iAnimatedAxles;
pAnimations[i].smAnimated->WillBeAnimated(); // wyłączenie optymalizacji
// transformu
// transformu
pAnimations[i].yUpdate = UpdateAxle; // animacja osi
pAnimations[i].fMaxDist =
50 *
@@ -4092,8 +4096,8 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
MoverParameters
->WheelDiameter; // 50m do kwadratu, a średnica do trzeciej
pAnimations[i].fMaxDist *= Global::fDistanceFactor; // współczynnik
// przeliczeniowy
// jakości ekranu
// przeliczeniowy
// jakości ekranu
}
}
// Ra: ustawianie indeksów osi
@@ -4121,12 +4125,12 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
else if ((k >= '1') && (k <= '9'))
{
pAnimations[i++].dWheelAngle = dWheelAngle + m; // obrót osi
// tocznych
// tocznych
--k; // następna będzie albo taka sama, albo bierzemy kolejny znak
}
else
k = MoverParameters->AxleArangement[j++]; // pobranie kolejnego
// znaku
// znaku
}
}
}
@@ -4162,17 +4166,17 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
// m(3)[1]=m[3][1]+0.054; //w górę o wysokość ślizgu (na razie tak)
if ((mdModel->Flags() & 0x8000) == 0) // jeśli wczytano z T3D
m.InitialRotate(); // może być potrzebny dodatkowy obrót, jeśli
// wczytano z T3D, tzn. przed wykonaniem
// Init()
// wczytano z T3D, tzn. przed wykonaniem
// Init()
pants[i].fParamPants->vPos.z =
m[3][0]; // przesunięcie w bok (asymetria)
pants[i].fParamPants->vPos.y =
m[3][1]; // przesunięcie w górę odczytane z modelu
if ((sm = pants[i].smElement[0]->ChildGet()) != NULL)
{ // jeśli ma potomny, można policzyć długość (odległość potomnego
// od osi obrotu)
// od osi obrotu)
m = float4x4(*sm->GetMatrix()); // wystarczyłby wskaźnik, nie
// trzeba kopiować
// trzeba kopiować
// może trzeba: pobrać macierz dolnego ramienia, wyzerować
// przesunięcie, przemnożyć przez macierz górnego
pants[i].fParamPants->fHoriz = -fabs(m[3][1]);
@@ -4189,18 +4193,18 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
// pants[i].fParamPants->fAngleL0=pants[i].fParamPants->fAngleL;
pants[i].fParamPants->fAngleL =
pants[i].fParamPants->fAngleL0; // początkowy kąt dolnego
// ramienia
// ramienia
if ((sm = sm->ChildGet()) != NULL)
{ // jeśli dalej jest ślizg, można policzyć długość górnego
// ramienia
// ramienia
m = float4x4(*sm->GetMatrix()); // wystarczyłby wskaźnik,
// nie trzeba kopiować
// nie trzeba kopiować
// trzeba by uwzględnić macierz dolnego ramienia, żeby
// uzyskać kąt do poziomu...
pants[i].fParamPants->fHoriz +=
fabs(m(3)[1]); // różnica długości rzutów ramion na
// płaszczyznę podstawy (jedna dodatnia,
// druga ujemna)
// płaszczyznę podstawy (jedna dodatnia,
// druga ujemna)
pants[i].fParamPants->fLenU1 =
hypot(m[3][1], m[3][2]); // po osi OX nie potrzeba
// pants[i].fParamPants->pantu=acos((1.22*cos(pants[i].fParamPants->fAngleL)+0.535)/1.755);
@@ -4210,7 +4214,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
pants[i].fParamPants->fAngleU0 =
atan2(fabs(m[3][2]),
fabs(m[3][1])); // początkowy kąt górnego
// ramienia, odczytany z modelu
// ramienia, odczytany z modelu
// if (pants[i].fParamPants->fAngleU0<M_PI_2)
// pants[i].fParamPants->fAngleU0+=M_PI; //gdyby w odwrotną
// stronę wyszło
@@ -4225,25 +4229,25 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
// Ra: ze względu na to, że niektóre modele pantografów są
// zrąbane, ich mierzenie ma obecnie ograniczony sens
sm->ParentMatrix(&m); // pobranie macierzy transformacji
// pivota ślizgu względem wstawienia
// pojazdu
// pivota ślizgu względem wstawienia
// pojazdu
if ((mdModel->Flags() & 0x8000) == 0) // jeśli wczytano z
// T3D
// T3D
m.InitialRotate(); // może być potrzebny dodatkowy
// obrót, jeśli wczytano z T3D, tzn.
// przed wykonaniem Init()
// obrót, jeśli wczytano z T3D, tzn.
// przed wykonaniem Init()
float det = Det(m);
if (fabs(det - 1.0) < 0.001) // dopuszczamy 1 promil błędu
// na skalowaniu ślizgu
// na skalowaniu ślizgu
{ // skalowanie jest w normie, można pobrać wymiary z modelu
pants[i].fParamPants->fHeight =
sm->MaxY(m); // przeliczenie maksimum wysokości
// wierzchołków względem macierzy
// wierzchołków względem macierzy
pants[i].fParamPants->fHeight -=
m[3][1]; // odjęcie wysokości pivota ślizgu
pants[i].fParamPants->vPos.x =
m[3][2]; // przy okazji odczytać z modelu pozycję w
// długości
// długości
// ErrorLog("Model OK: "+asModel+",
// height="+pants[i].fParamPants->fHeight);
// ErrorLog("Model OK: "+asModel+",
@@ -4282,7 +4286,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
if (pants[i].fParamPants->vPos.y == 0.0)
{ // jeśli pierwsze ramię nie ustawiło tej wartości, próbować drugim
//!!!! docelowo zrobić niezależną animację ramion z każdej
//strony
// strony
m = float4x4(
*sm->GetMatrix()); // skopiowanie, bo będziemy mnożyć
m(3)[1] =
@@ -4345,7 +4349,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
double pant1x = Parser->GetNextSymbol().ToDouble();
double pant2x = Parser->GetNextSymbol().ToDouble();
double pant1h = Parser->GetNextSymbol().ToDouble(); // wysokość pierwszego
// ślizgu
// ślizgu
double pant2h = Parser->GetNextSymbol().ToDouble(); // wysokość drugiego ślizgu
if (pant1h > 0.5)
pant1h = pant2h; // tu może być zbyt duża wartość
@@ -4484,8 +4488,8 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
if (pAnimations[i + j].smAnimated)
{ //++iAnimatedDoors;
pAnimations[i + j].smAnimated->WillBeAnimated(); // wyłączenie
// optymalizacji
// transformu
// optymalizacji
// transformu
switch (MoverParameters->DoorOpenMethod)
{ // od razu zapinamy potrzebny typ animacji
case 1:
@@ -4557,7 +4561,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
((MoverParameters->EngineType == ElectricSeriesMotor) ||
(MoverParameters->EngineType ==
ElectricInductionMotor)))) // plik z dzwiekiem wentylatora, mnozniki i
// ofsety amp. i czest.
// ofsety amp. i czest.
{
str = Parser->GetNextSymbol();
rsWentylator.Init(str.c_str(), Parser->GetNextSymbol().ToDouble(),
@@ -4630,7 +4634,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
rsDerailment.FA = 0.0;
}
else if (str == AnsiString("dieselinc:")) // dzwiek przy wlazeniu na obroty
// woodwarda
// woodwarda
{
str = Parser->GetNextSymbol();
rsDiesielInc.Init(str.c_str(), Parser->GetNextSymbol().ToDouble(),
@@ -4769,7 +4773,7 @@ void TDynamicObject::RadioStop()
{ // zatrzymanie pojazdu
if (Mechanik) // o ile ktoś go prowadzi
if (MoverParameters->SecuritySystem.RadioStop) // jeśli pojazd ma RadioStop i jest on
// aktywny
// aktywny
Mechanik->PutCommand("Emergency_brake", 1.0, 1.0, &vPosition, stopRadio);
};
@@ -4828,7 +4832,7 @@ int TDynamicObject::DirectionSet(int d)
ABuScanObjects(-1, 300);
}
return 1 - (iDirection ? NextConnectedNo : PrevConnectedNo); // informacja o położeniu
// następnego
// następnego
};
TDynamicObject *__fastcall TDynamicObject::PrevAny()
@@ -4865,7 +4869,7 @@ double TDynamicObject::NextDistance(double d)
TDynamicObject *__fastcall TDynamicObject::Neightbour(int &dir)
{ // ustalenie następnego (1) albo poprzedniego (0) w składzie bez względu na prawidłowość
// iDirection
// iDirection
int d = dir; // zapamiętanie kierunku
dir = 1 - (dir ? NextConnectedNo : PrevConnectedNo); // nowa wartość
return (d ? (MoverParameters->Couplers[1].CouplingFlag ? NextConnected : NULL) :
@@ -4891,14 +4895,14 @@ void TDynamicObject::CoupleDist()
if (MoverParameters->Couplers[0].CouplingFlag == 0) // jeśli wirtualny
if (MoverParameters->Couplers[0].CoupleDist < 300.0) // i mniej niż 300m
{ // przez MoverParameters->Couplers[0].Connected nie da się dostać do DynObj, stąd
// prowizorka
// prowizorka
// WriteLog("Collision of
// "+AnsiString(MoverParameters->Couplers[0].CoupleDist)+"m detected by
// "+asName+":0.");
w = 0.5 * (MoverParameters->Couplers[0].Connected->Dim.W +
MoverParameters->Dim.W); // minimalna odległość minięcia
d = -DotProduct(vLeft, vCoulpler[0]); // odległość prostej ruchu od początku
// układu współrzędnych
// układu współrzędnych
d = fabs(
DotProduct(vLeft,
((TMoverParameters *)(MoverParameters->Couplers[0].Connected))
@@ -4919,7 +4923,7 @@ void TDynamicObject::CoupleDist()
w = 0.5 * (MoverParameters->Couplers[1].Connected->Dim.W +
MoverParameters->Dim.W); // minimalna odległość minięcia
d = -DotProduct(vLeft, vCoulpler[1]); // odległość prostej ruchu od początku
// układu współrzędnych
// układu współrzędnych
d = fabs(
DotProduct(vLeft,
((TMoverParameters *)(MoverParameters->Couplers[1].Connected))
@@ -4935,7 +4939,7 @@ void TDynamicObject::CoupleDist()
TDynamicObject *__fastcall TDynamicObject::ControlledFind()
{ // taka proteza: chcę podłączyć kabinę EN57 bezpośrednio z silnikowym, aby nie robić tego przez
// ukrotnienie
// ukrotnienie
// drugi silnikowy i tak musi być ukrotniony, podobnie jak kolejna jednostka
// lepiej by było przesyłać komendy sterowania, co jednak wymaga przebudowy transmisji komend
// (LD)