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

Kompiluje się do DynamicObject. Prace nad TMoverParameters.

This commit is contained in:
firleju
2016-10-25 22:46:26 +02:00
parent 28d5be7363
commit 1491681576
27 changed files with 638 additions and 530 deletions

View File

@@ -32,6 +32,7 @@ http://mozilla.org/MPL/2.0/.
#include "Camera.h" //bo likwidujemy trzęsienie
#include "Console.h"
#include "Traction.h"
#include <fstream>
#pragma package(smart_init)
// Ra: taki zapis funkcjonuje lepiej, ale może nie jest optymalny
@@ -1395,18 +1396,18 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist)
if (FoundedObj->PrevConnected)
if (FoundedObj->PrevConnected != this) // odświeżenie tego samego się nie liczy
WriteLog("0! Coupler warning on " + asName + ":" +
AnsiString(MyCouplFound) + " - " + FoundedObj->asName +
to_string(MyCouplFound) + " - " + FoundedObj->asName +
":0 connected to " + FoundedObj->PrevConnected->asName + ":" +
AnsiString(FoundedObj->PrevConnectedNo));
to_string(FoundedObj->PrevConnectedNo));
}
else
{
if (FoundedObj->NextConnected)
if (FoundedObj->NextConnected != this) // odświeżenie tego samego się nie liczy
WriteLog("0! Coupler warning on " + asName + ":" +
AnsiString(MyCouplFound) + " - " + FoundedObj->asName +
to_string(MyCouplFound) + " - " + FoundedObj->asName +
":1 connected to " + FoundedObj->NextConnected->asName + ":" +
AnsiString(FoundedObj->NextConnectedNo));
to_string(FoundedObj->NextConnectedNo));
}
if (FoundedObj == NULL) // jeśli nie ma na tym samym, szukamy po okolicy
@@ -1486,9 +1487,9 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist)
if (FoundedObj->PrevConnected)
if (FoundedObj->PrevConnected != this)
WriteLog("1! Coupler warning on " + asName + ":" +
AnsiString(MyCouplFound) + " - " + FoundedObj->asName +
to_string(MyCouplFound) + " - " + FoundedObj->asName +
":0 connected to " + FoundedObj->PrevConnected->asName + ":" +
AnsiString(FoundedObj->PrevConnectedNo));
to_string(FoundedObj->PrevConnectedNo));
FoundedObj->PrevConnected = this;
FoundedObj->PrevConnectedNo = MyCouplFound;
}
@@ -1498,9 +1499,9 @@ void TDynamicObject::ABuScanObjects(int ScanDir, double ScanDist)
if (FoundedObj->NextConnected)
if (FoundedObj->NextConnected != this)
WriteLog("1! Coupler warning on " + asName + ":" +
AnsiString(MyCouplFound) + " - " + FoundedObj->asName +
to_string(MyCouplFound) + " - " + FoundedObj->asName +
":1 connected to " + FoundedObj->NextConnected->asName + ":" +
AnsiString(FoundedObj->NextConnectedNo));
to_string(FoundedObj->NextConnectedNo));
FoundedObj->NextConnected = this;
FoundedObj->NextConnectedNo = MyCouplFound;
}
@@ -1660,26 +1661,26 @@ TDynamicObject::~TDynamicObject()
}
double
TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
AnsiString BaseDir, // z którego katalogu wczytany, np. "PKP/EU07"
AnsiString asReplacableSkin, // nazwa wymiennej tekstury
AnsiString Type_Name, // nazwa CHK/MMD, np. "303E"
TDynamicObject::Init(string Name, // nazwa pojazdu, np. "EU07-424"
string BaseDir, // z którego katalogu wczytany, np. "PKP/EU07"
string asReplacableSkin, // nazwa wymiennej tekstury
string Type_Name, // nazwa CHK/MMD, np. "303E"
TTrack *Track, // tor początkowy wstwawienia (początek składu)
double fDist, // dystans względem punktu 1
AnsiString DriverType, // typ obsady
string DriverType, // typ obsady
double fVel, // prędkość początkowa
AnsiString TrainName, // nazwa składu, np. "PE2307" albo Vmax, jeśli pliku
string TrainName, // nazwa składu, np. "PE2307" albo Vmax, jeśli pliku
// nie ma a są cyfry
float Load, // ilość ładunku
AnsiString LoadType, // nazwa ładunku
string LoadType, // nazwa ładunku
bool Reversed, // true, jeśli ma stać odwrotnie w składzie
AnsiString MoreParams // dodatkowe parametry wczytywane w postaci tekstowej
string MoreParams // dodatkowe parametry wczytywane w postaci tekstowej
)
{ // Ustawienie początkowe pojazdu
iDirection = (Reversed ? 0 : 1); // Ra: 0, jeśli ma być wstawiony jako obrócony tyłem
asBaseDir = "dynamic\\" + BaseDir + "\\"; // McZapkie-310302
asName = Name;
AnsiString asAnimName = ""; // zmienna robocza do wyszukiwania osi i wózków
string asAnimName = ""; // zmienna robocza do wyszukiwania osi i wózków
// Ra: zmieniamy znaczenie obsady na jednoliterowe, żeby dosadzić kierownika
if (DriverType == "headdriver")
DriverType = "1"; // sterujący kabiną +1
@@ -1693,9 +1694,9 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
else if (DriverType == "nobody")
DriverType = ""; // nikt nie siedzi
int Cab = 0; // numer kabiny z obsadą (nie można zająć obu)
if (DriverType.Pos("1")) // od przodu składu
if (DriverType.find("1")) // od przodu składu
Cab = 1; // iDirection?1:-1; //iDirection=1 gdy normalnie, =0 odwrotnie
else if (DriverType.Pos("2")) // od tyłu składu
else if (DriverType.find("2")) // od tyłu składu
Cab = -1; // iDirection?-1:1;
else if (DriverType == "p")
{
@@ -1719,12 +1720,12 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
iLights = MoverParameters->iLights; // wskaźnik na stan własnych świateł
// (zmienimy dla rozrządczych EZT)
// McZapkie: TypeName musi byc nazwą CHK/MMD pojazdu
if (!MoverParameters->LoadChkFile(asBaseDir))
if (!MoverParameters->LoadFIZ(asBaseDir))
{ // jak wczytanie CHK się nie uda, to błąd
if (ConversionError == -8)
ErrorLog("Missed file: " + BaseDir + "\\" + Type_Name + ".fiz");
Error("Cannot load dynamic object " + asName + " from:\r\n" + BaseDir + "\\" + Type_Name +
".fiz\r\nError " + ConversionError + " in line " + LineCount);
".fiz\r\nError " + to_string(ConversionError) + " in line " + to_string(LineCount));
return 0.0; // zerowa długość to brak pojazdu
}
bool driveractive = (fVel != 0.0); // jeśli prędkość niezerowa, to aktywujemy ruch
@@ -1744,55 +1745,55 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
// dodatkowe parametry yB
MoreParams += "."; // wykonuje o jedną iterację za mało, więc trzeba mu dodać
// kropkę na koniec
int kropka = MoreParams.Pos("."); // znajdź kropke
AnsiString ActPar; // na parametry
int kropka = MoreParams.find("."); // znajdź kropke
string ActPar; // na parametry
while (kropka > 0) // jesli sa kropki jeszcze
{
int dlugosc = MoreParams.Length();
ActPar = MoreParams.SubString(1, kropka - 1).UpperCase(); // pierwszy parametr;
MoreParams = MoreParams.SubString(kropka + 1, dlugosc - kropka); // reszta do dalszej
int dlugosc = MoreParams.length();
ActPar = ToUpper(MoreParams.substr(0, kropka - 1)); // pierwszy parametr;
MoreParams = MoreParams.substr(kropka + 1, dlugosc - kropka); // reszta do dalszej
// obrobki
kropka = MoreParams.Pos(".");
kropka = MoreParams.find(".");
if (ActPar.SubString(1, 1) == "B") // jesli hamulce
if (ActPar.substr(0, 1) == "B") // jesli hamulce
{ // sprawdzanie kolejno nastaw
WriteLog("Wpis hamulca: " + ActPar);
if (ActPar.Pos("G") > 0)
if (ActPar.find("G") != string::npos)
{
MoverParameters->BrakeDelaySwitch(bdelay_G);
}
if (ActPar.Pos("P") > 0)
if (ActPar.find("P") != string::npos)
{
MoverParameters->BrakeDelaySwitch(bdelay_P);
}
if (ActPar.Pos("R") > 0)
if (ActPar.find("R") != string::npos)
{
MoverParameters->BrakeDelaySwitch(bdelay_R);
}
if (ActPar.Pos("M") > 0)
if (ActPar.find("M") != string::npos)
{
MoverParameters->BrakeDelaySwitch(bdelay_R);
MoverParameters->BrakeDelaySwitch(bdelay_R + bdelay_M);
}
// wylaczanie hamulca
if (ActPar.Pos("<>") > 0) // wylaczanie na probe hamowania naglego
if (ActPar.find("<>") != string::npos) // wylaczanie na probe hamowania naglego
{
MoverParameters->BrakeStatus |= 128; // wylacz
}
if (ActPar.Pos("0") > 0) // wylaczanie na sztywno
if (ActPar.find("0") != string::npos) // wylaczanie na sztywno
{
MoverParameters->BrakeStatus |= 128; // wylacz
MoverParameters->Hamulec->ForceEmptiness();
MoverParameters->BrakeReleaser(1); // odluznij automatycznie
}
if (ActPar.Pos("E") > 0) // oprozniony
if (ActPar.find("E") != string::npos) // oprozniony
{
MoverParameters->Hamulec->ForceEmptiness();
MoverParameters->BrakeReleaser(1); // odluznij automatycznie
MoverParameters->Pipe->CreatePress(0);
MoverParameters->Pipe2->CreatePress(0);
}
if (ActPar.Pos("Q") > 0) // oprozniony
if (ActPar.find("Q") != string::npos) // oprozniony
{
// MoverParameters->Hamulec->ForceEmptiness(); //TODO: sprawdzic,
// dlaczego
@@ -1807,7 +1808,7 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
MoverParameters->CompressedVolume = 0;
}
if (ActPar.Pos("1") > 0) // wylaczanie 10%
if (ActPar.find("1") != string::npos) // wylaczanie 10%
{
if (random(10) < 1) // losowanie 1/10
{
@@ -1816,7 +1817,7 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
MoverParameters->BrakeReleaser(1); // odluznij automatycznie
}
}
if (ActPar.Pos("X") > 0) // agonalny wylaczanie 20%, usrednienie przekladni
if (ActPar.find("X") != string::npos) // agonalny wylaczanie 20%, usrednienie przekladni
{
if (random(100) < 20) // losowanie 20/100
{
@@ -1850,27 +1851,27 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
}
}
// nastawianie ladunku
if (ActPar.Pos("T") > 0) // prozny
if (ActPar.find("T") != string::npos) // prozny
{
MoverParameters->DecBrakeMult();
MoverParameters->DecBrakeMult();
} // dwa razy w dol
if (ActPar.Pos("H") > 0) // ladowny I (dla P-Ł dalej prozny)
if (ActPar.find("H") != string::npos) // ladowny I (dla P-Ł dalej prozny)
{
MoverParameters->IncBrakeMult();
MoverParameters->IncBrakeMult();
MoverParameters->DecBrakeMult();
} // dwa razy w gore i obniz
if (ActPar.Pos("F") > 0) // ladowny II
if (ActPar.find("F") != string::npos) // ladowny II
{
MoverParameters->IncBrakeMult();
MoverParameters->IncBrakeMult();
} // dwa razy w gore
if (ActPar.Pos("N") > 0) // parametr neutralny
if (ActPar.find("N") != string::npos) // parametr neutralny
{
}
} // koniec hamulce
else if (ActPar.SubString(1, 1) == "") // tu mozna wpisac inny prefiks i inne rzeczy
else if (ActPar.substr(0, 1) == "") // tu mozna wpisac inny prefiks i inne rzeczy
{
// jakies inne prefiksy
}
@@ -1903,7 +1904,7 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
// if (MoverParameters->CabNo!=0)
if (DriverType != "")
{ // McZapkie-040602: jeśli coś siedzi w pojeździe
if (Name == AnsiString(Global::asHumanCtrlVehicle)) // jeśli pojazd wybrany do prowadzenia
if (Name == Global::asHumanCtrlVehicle) // jeśli pojazd wybrany do prowadzenia
{
if (DebugModeFlag ? false : MoverParameters->EngineType !=
Dumb) // jak nie Debugmode i nie jest dumbem
@@ -1913,13 +1914,13 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
}
// McZapkie-151102: rozkład jazdy czytany z pliku *.txt z katalogu w którym
// jest sceneria
if (DriverType.Pos("1") || DriverType.Pos("2"))
if (DriverType.find("1") || DriverType.find("2"))
{ // McZapkie-110303: mechanik i rozklad tylko gdy jest obsada
// MoverParameters->ActiveCab=MoverParameters->CabNo; //ustalenie aktywnej
// kabiny
// (rozrząd)
Mechanik = new TController(Controller, this, Aggressive);
if (TrainName.IsEmpty()) // jeśli nie w składzie
if (TrainName.empty()) // jeśli nie w składzie
{
Mechanik->DirectionInitial(); // załączenie rozrządu (wirtualne kabiny) itd.
Mechanik->PutCommand(
@@ -1988,11 +1989,11 @@ TDynamicObject::Init(AnsiString Name, // nazwa pojazdu, np. "EU07-424"
if (mdModel) // jeśli ma w czym szukać
for (int i = 0; i < 2; i++)
{
asAnimName = AnsiString("buffer_left0") + (i + 1);
asAnimName = string("buffer_left0") + to_string(i + 1);
smBuforLewy[i] = mdModel->GetFromName(asAnimName.c_str());
if (smBuforLewy[i])
smBuforLewy[i]->WillBeAnimated(); // ustawienie flagi animacji
asAnimName = AnsiString("buffer_right0") + (i + 1);
asAnimName = string("buffer_right0") + to_string(i + 1);
smBuforPrawy[i] = mdModel->GetFromName(asAnimName.c_str());
if (smBuforPrawy[i])
smBuforPrawy[i]->WillBeAnimated();
@@ -2329,14 +2330,14 @@ void TDynamicObject::LoadUpdate()
// Ra: nie próbujemy wczytywać modeli miliony razy podczas renderowania!!!
if ((mdLoad == NULL) && (MoverParameters->Load > 0))
{
AnsiString asLoadName =
string asLoadName =
asBaseDir + MoverParameters->LoadType + ".t3d"; // zapamiętany katalog pojazdu
// asLoadName=MoverParameters->LoadType;
// if (MoverParameters->LoadType!=AnsiString("passengers"))
Global::asCurrentTexturePath = asBaseDir; // bieżąca ścieżka do tekstur to dynamic/...
mdLoad = TModelsManager::GetModel(asLoadName.c_str()); // nowy ładunek
Global::asCurrentTexturePath =
AnsiString(szTexturePath); // z powrotem defaultowa sciezka do tekstur
string(szTexturePath); // z powrotem defaultowa sciezka do tekstur
// Ra: w MMD można by zapisać położenie modelu ładunku (np. węgiel) w
// zależności od
// załadowania
@@ -2615,10 +2616,10 @@ bool TDynamicObject::Update(double dt, double dt1)
// Ra 15-01: bezwzględne współrzędne pantografu nie są dostępne,
// więc lepiej się tego nie zaloguje
ErrorLog("Voltage loss: by " + MoverParameters->Name + " at " +
FloatToStrF(vPosition.x, ffFixed, 7, 2) + " " +
FloatToStrF(vPosition.y, ffFixed, 7, 2) + " " +
FloatToStrF(vPosition.z, ffFixed, 7, 2) + ", time " +
FloatToStrF(NoVoltTime, ffFixed, 7, 2));
to_string(vPosition.x, 2, 7) + " " +
to_string(vPosition.y, 2, 7) + " " +
to_string(vPosition.z, 2, 7) + ", time " +
to_string(NoVoltTime, 2, 7));
// if (MoverParameters->PantRearUp)
// if (iAnimType[ANIM_PANTS]>1)
// if (pants[1])
@@ -4204,38 +4205,37 @@ void TDynamicObject::RenderAlpha()
// McZapkie-250202
// wczytywanie pliku z danymi multimedialnymi (dzwieki)
void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
AnsiString ReplacableSkin)
void TDynamicObject::LoadMMediaFile(string BaseDir, string TypeName,
string ReplacableSkin)
{
double dSDist;
TFileStream *fs;
// asBaseDir=BaseDir;
Global::asCurrentDynamicPath = BaseDir;
AnsiString asFileName = BaseDir + TypeName + ".mmd";
AnsiString asLoadName = BaseDir + MoverParameters->LoadType + ".t3d";
if (!FileExists(asFileName))
string asFileName = BaseDir + TypeName + ".mmd";
string asLoadName = BaseDir + MoverParameters->LoadType + ".t3d";
ifstream *fs = new ifstream(asFileName.c_str());
if (!fs->is_open())
{
ErrorLog("Missed file: " + asFileName); // brak MMD
delete fs;
return;
}
fs = new TFileStream(asFileName, fmOpenRead | fmShareCompat);
if (!fs)
return;
int size = fs->Size;
if (!size)
if (fs->width() == 0)
{
return delete fs;
};
AnsiString asAnimName;
string asAnimName;
bool Stop_InternalData = false;
char *buf = new char[size + 1]; // ciąg bajtów o długości równej rozmiwarowi pliku
buf[size] = '\0'; // zakończony zerem na wszelki wypadek
fs->Read(buf, size);
//char *buf = new char[size + 1]; // ciąg bajtów o długości równej rozmiwarowi pliku
stringstream buffer;
buffer << fs->rdbuf();
//buf[size] = '\0'; // zakończony zerem na wszelki wypadek
delete fs;
TQueryParserComp *Parser;
Parser = new TQueryParserComp(NULL);
Parser->TextToParse = AnsiString(buf);
delete[] buf;
Parser->TextToParse = AnsiString(buffer.str().c_str());
//delete[] buf;
AnsiString str;
// Parser->LoadStringToParse(asFile);
Parser->First();
@@ -4248,18 +4248,18 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
if (str == AnsiString("models:")) // modele i podmodele
{
iMultiTex = 0; // czy jest wiele tekstur wymiennych?
asModel = Parser->GetNextSymbol().LowerCase();
if (asModel.Pos("#") == asModel.Length()) // Ra 2015-01: nie podoba mi się to
asModel = Parser->GetNextSymbol().LowerCase().c_str();
if (asModel.find("#") == asModel.length()) // Ra 2015-01: nie podoba mi się to
{ // model wymaga wielu tekstur wymiennych
iMultiTex = 1;
asModel = asModel.SubString(1, asModel.Length() - 1);
asModel = asModel.substr(0, asModel.length() - 1);
}
if ((i = asModel.Pos(",")) > 0)
if ((i = asModel.find(",")) != string::npos)
{ // Ra 2015-01: może szukać przecinka w
// nazwie modelu, a po przecinku była by
// liczba
// tekstur?
if (i < asModel.Length())
if (i < asModel.length())
iMultiTex = asModel[i + 1] - '0';
if (iMultiTex < 0)
iMultiTex = 0;
@@ -4270,12 +4270,12 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
// modele w dynamics/basedir
Global::asCurrentTexturePath = BaseDir; // biezaca sciezka do tekstur to dynamic/...
mdModel = TModelsManager::GetModel(asModel.c_str(), true);
if (ReplacableSkin != AnsiString("none"))
if (ReplacableSkin != "none")
{ // tekstura wymienna jest raczej jedynie w "dynamic\"
ReplacableSkin =
Global::asCurrentTexturePath + ReplacableSkin; // skory tez z dynamic/...
AnsiString x = TextureTest(Global::asCurrentTexturePath + "nowhere"); // na razie prymitywnie
if (!x.IsEmpty())
string x = TextureTest(Global::asCurrentTexturePath + "nowhere"); // na razie prymitywnie
if (!x.empty())
ReplacableSkinID[4] = TTexturesManager::GetTextureID(NULL, NULL, (Global::asCurrentTexturePath + "nowhere").c_str(), 9);
/*
if ((i = ReplacableSkin.Pos("|")) > 0) // replacable dzielone
@@ -4404,7 +4404,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
asModel = BaseDir + asModel;
mdPrzedsionek = TModelsManager::GetModel(asModel.c_str(), true);
}
if (!MoverParameters->LoadAccepted.IsEmpty())
if (!MoverParameters->LoadAccepted.empty())
// if (MoverParameters->LoadAccepted!=AnsiString("")); // &&
// MoverParameters->LoadType!=AnsiString("passengers"))
if (MoverParameters->EnginePowerSource.SourceType == CurrentCollector)
@@ -4441,7 +4441,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
else // Ra: tu wczytywanie modelu ładunku jest w porządku
mdLoad = TModelsManager::GetModel(asLoadName.c_str(), true); // ladunek
Global::asCurrentTexturePath =
AnsiString(szTexturePath); // z powrotem defaultowa sciezka do tekstur
string(szTexturePath); // z powrotem defaultowa sciezka do tekstur
while (!Parser->EndOfFile && str != AnsiString("endmodels"))
{
str = Parser->GetNextSymbol().LowerCase();
@@ -4518,7 +4518,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
}
if (str == AnsiString("lowpolyinterior:")) // ABu: wnetrze lowpoly
{
asModel = Parser->GetNextSymbol().LowerCase();
asModel = Parser->GetNextSymbol().LowerCase().c_str();
asModel = BaseDir + asModel; // McZapkie-200702 - dynamics maja swoje
// modele w dynamic/basedir
Global::asCurrentTexturePath =
@@ -4530,13 +4530,13 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
}
if (str == AnsiString("brakemode:"))
{ // Ra 15-01: gałka nastawy hamulca
asAnimName = Parser->GetNextSymbol().LowerCase();
asAnimName = Parser->GetNextSymbol().LowerCase().c_str();
smBrakeMode = mdModel->GetFromName(asAnimName.c_str());
// jeszcze wczytać kąty obrotu dla poszczególnych ustawień
}
if (str == AnsiString("loadmode:"))
{ // Ra 15-01: gałka nastawy hamulca
asAnimName = Parser->GetNextSymbol().LowerCase();
asAnimName = Parser->GetNextSymbol().LowerCase().c_str();
smLoadMode = mdModel->GetFromName(asAnimName.c_str());
// jeszcze wczytać kąty obrotu dla poszczególnych ustawień
}
@@ -4546,7 +4546,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
str = Parser->GetNextSymbol();
for (i = 0; i < iAnimType[ANIM_WHEELS]; ++i) // liczba osi
{ // McZapkie-050402: wyszukiwanie kol o nazwie str*
asAnimName = str + AnsiString(i + 1);
asAnimName = str.c_str() + to_string(i + 1);
pAnimations[i].smAnimated =
mdModel->GetFromName(asAnimName.c_str()); // ustalenie submodelu
if (pAnimations[i].smAnimated)
@@ -4580,7 +4580,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
{ // obsługa różnych średnic, o
// ile występują
while ((i < iAnimType[ANIM_WHEELS]) &&
(j <= MoverParameters->AxleArangement.Length()))
(j <= MoverParameters->AxleArangement.length()))
{ // wersja ze wskaźnikami jest
// bardziej elastyczna na nietypowe
// układy
@@ -4630,7 +4630,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
for (int i = 0; i < iAnimType[ANIM_PANTS]; i++)
{ // Winger 160204: wyszukiwanie max 2 patykow o nazwie
// str*
asAnimName = str + AnsiString(i + 1);
asAnimName = str.c_str() + to_string(i + 1);
sm = mdModel->GetFromName(asAnimName.c_str());
pants[i].smElement[0] = sm; // jak NULL, to nie będzie animowany
if (sm)
@@ -4737,8 +4737,8 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
pants[i].fParamPants->fHeight =
0.0; // niech będzie odczyt z pantfactors:
ErrorLog("Bad model: " + asModel + ", scale of " +
AnsiString(sm->pName) + " is " +
AnsiString(100.0 * det) + "%");
(sm->pName) + " is " +
to_string(100.0 * det) + "%");
}
}
}
@@ -4757,7 +4757,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
for (int i = 0; i < iAnimType[ANIM_PANTS]; i++)
{ // Winger 160204: wyszukiwanie max 2 patykow o nazwie
// str*
asAnimName = str + AnsiString(i + 1);
asAnimName = str.c_str() + to_string(i + 1);
sm = mdModel->GetFromName(asAnimName.c_str());
pants[i].smElement[1] = sm; // jak NULL, to nie będzie animowany
if (sm)
@@ -4796,7 +4796,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
for (int i = 0; i < iAnimType[ANIM_PANTS]; i++)
{ // Winger 160204: wyszukiwanie max 2 patykow o nazwie
// str*
asAnimName = str + AnsiString(i + 1);
asAnimName = str.c_str() + to_string(i + 1);
pants[i].smElement[2] = mdModel->GetFromName(asAnimName.c_str());
pants[i].smElement[2]->WillBeAnimated();
}
@@ -4808,7 +4808,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
for (int i = 0; i < iAnimType[ANIM_PANTS]; i++)
{ // Winger 160204: wyszukiwanie max 2 patykow o nazwie
// str*
asAnimName = str + AnsiString(i + 1);
asAnimName = str.c_str() + to_string(i + 1);
pants[i].smElement[3] = mdModel->GetFromName(asAnimName.c_str());
pants[i].smElement[3]->WillBeAnimated();
}
@@ -4820,7 +4820,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
for (int i = 0; i < iAnimType[ANIM_PANTS]; i++)
{ // Winger 160204: wyszukiwanie max 2 patykow o nazwie
// str*
asAnimName = str + AnsiString(i + 1);
asAnimName = str.c_str() + to_string(i + 1);
pants[i].smElement[4] = mdModel->GetFromName(asAnimName.c_str());
pants[i].smElement[4]->WillBeAnimated();
pants[i].yUpdate = UpdatePant;
@@ -4957,7 +4957,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
for (int i = 1; i <= 4; i++)
{ // McZapkie-050402: wyszukiwanie max 4
// wahaczy o nazwie str*
asAnimName = str + AnsiString(i);
asAnimName = str.c_str() + to_string(i);
smWahacze[i - 1] = mdModel->GetFromName(asAnimName.c_str());
smWahacze[i - 1]->WillBeAnimated();
}
@@ -4990,7 +4990,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
j += iAnimType[i]; // zliczanie wcześniejszych animacji
for (i = 0; i < iAnimType[ANIM_DOORS]; ++i) // liczba drzwi
{ // NBMX wrzesien 2003: wyszukiwanie drzwi o nazwie str*
asAnimName = str + AnsiString(i + 1);
asAnimName = str.c_str() + to_string(i + 1);
pAnimations[i + j].smAnimated =
mdModel->GetFromName(asAnimName.c_str()); // ustalenie submodelu
if (pAnimations[i + j].smAnimated)
@@ -5057,7 +5057,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
rsSilnik.Init(str.c_str(), Parser->GetNextSymbol().ToDouble(), GetPosition().x,
GetPosition().y, GetPosition().z, true, true);
if (rsSilnik.GetWaveTime() == 0)
ErrorLog("Missed sound: \"" + str + "\" for " + asFileName);
ErrorLog("Missed sound: \"" + string(str.c_str()) + "\" for " + asFileName);
if (MoverParameters->EngineType == DieselEngine)
rsSilnik.AM = Parser->GetNextSymbol().ToDouble() /
(MoverParameters->Power + MoverParameters->nmax * 60);
@@ -5291,7 +5291,7 @@ void TDynamicObject::LoadMMediaFile(AnsiString BaseDir, AnsiString TypeName,
mdLowPolyInt->Init();
// sHorn2.CopyIfEmpty(sHorn1); //żeby jednak trąbił też drugim
Global::asCurrentTexturePath =
AnsiString(szTexturePath); // kiedyś uproszczone wnętrze mieszało tekstury nieba
string(szTexturePath); // kiedyś uproszczone wnętrze mieszało tekstury nieba
}
//---------------------------------------------------------------------------
@@ -5646,27 +5646,27 @@ int TDynamicObject::RouteWish(TTrack *tr)
return Mechanik ? Mechanik->CrossRoute(tr) : 0; // wg AI albo prosto
};
AnsiString TDynamicObject::TextureTest(AnsiString &name)
string TDynamicObject::TextureTest(string &name)
{ // Ra 2015-01: sprawdzenie dostępności tekstury o podanej nazwie
AnsiString x = name + ".dds"; // na razie prymitywnie
if (FileExists(x))
string x = name + ".dds"; // na razie prymitywnie
if (FileExists(x.c_str()))
return x;
else
{
x = name + ".tga"; // w zasadzie to należałoby uwzględnić deklarowaną kolejność
if (FileExists(x))
if (FileExists(x.c_str()))
return x;
else
{
x = name + ".bmp";
if (FileExists(x))
if (FileExists(x.c_str()))
return x;
}
}
return ""; // nie znaleziona
};
void TDynamicObject::DestinationSet(AnsiString to, AnsiString numer)
void TDynamicObject::DestinationSet(string to, string numer)
{ // ustawienie stacji
// docelowej oraz wymiennej
// tekstury 4, jeśli
@@ -5680,34 +5680,34 @@ void TDynamicObject::DestinationSet(AnsiString to, AnsiString numer)
numer = Global::Bezogonkow(numer);
asDestination = to;
to = Global::Bezogonkow(to); // do szukania pliku obcinamy ogonki
AnsiString x;
string x;
x = TextureTest(asBaseDir + numer + "@" + MoverParameters->TypeName);
if (!x.IsEmpty())
if (!x.empty())
{
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
return;
}
x = TextureTest(asBaseDir + numer );
if (!x.IsEmpty())
if (!x.empty())
{
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
return;
}
if (to.IsEmpty())
if (to.empty())
to = "nowhere";
x = TextureTest(asBaseDir + to + "@" + MoverParameters->TypeName); // w pierwszej kolejności z nazwą FIZ/MMD
if (!x.IsEmpty())
if (!x.empty())
{
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
return;
}
x = TextureTest(asBaseDir + to); // na razie prymitywnie
if (!x.IsEmpty())
if (!x.empty())
ReplacableSkinID[4] = TTexturesManager::GetTextureID( NULL, NULL, x.c_str(), 9); // rozmywania 0,1,4,5 nie nadają się
else
{
x = TextureTest(asBaseDir + "nowhere"); // jak nie znalazł dedykowanej, to niech daje nowhere
if (!x.IsEmpty())
if (!x.empty())
ReplacableSkinID[4] = TTexturesManager::GetTextureID(NULL, NULL, x.c_str(), 9);
}
// Ra 2015-01: żeby zalogować błąd, trzeba by mieć pewność, że model używa