mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
Kompiluje się do DynamicObject. Prace nad TMoverParameters.
This commit is contained in:
@@ -463,26 +463,26 @@ bool TAnimModel::Init(AnsiString asName, AnsiString asReplacableTexture)
|
||||
|
||||
bool TAnimModel::Load(cParser *parser, bool ter)
|
||||
{ // rozpoznanie wpisu modelu i ustawienie świateł
|
||||
AnsiString str;
|
||||
std::string str;
|
||||
std::string token;
|
||||
parser->getTokens(); // nazwa modelu
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
*parser >> str;
|
||||
//str = token;
|
||||
parser->getTokens(1, false); // tekstura (zmienia na małe)
|
||||
*parser >> token;
|
||||
if (!Init(str, AnsiString(token.c_str())))
|
||||
if (!Init(AnsiString(str.c_str()), AnsiString(token.c_str())))
|
||||
{
|
||||
if (str != "notload")
|
||||
{ // gdy brak modelu
|
||||
if (ter) // jeśli teren
|
||||
{
|
||||
if (str.SubString(str.Length() - 3, 4) == ".t3d")
|
||||
str[str.Length() - 2] = 'e';
|
||||
if (str.substr(str.length() - 3, 4) == ".t3d")
|
||||
str[str.length() - 2] = 'e';
|
||||
Global::asTerrainModel = str;
|
||||
WriteLog(AnsiString("Terrain model \"" + str + "\" will be created."));
|
||||
WriteLog("Terrain model \"" + str + "\" will be created.");
|
||||
}
|
||||
else
|
||||
ErrorLog(AnsiString("Missed file: " + str));
|
||||
ErrorLog("Missed file: " + str);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -516,16 +516,16 @@ bool TAnimModel::Load(cParser *parser, bool ter)
|
||||
if (token.compare("lights") == 0)
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
*parser >> str;
|
||||
//str = AnsiString(token.c_str());
|
||||
do
|
||||
{
|
||||
ti = str.ToDouble(); // stan światła jest liczbą z ułamkiem
|
||||
ti = atof(str.c_str()); // stan światła jest liczbą z ułamkiem
|
||||
LightSet(i, ti);
|
||||
i++;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
*parser >> str;
|
||||
//str = AnsiString(token.c_str());
|
||||
} while (str != "endmodel");
|
||||
}
|
||||
return true;
|
||||
|
||||
3
Driver.h
3
Driver.h
@@ -16,6 +16,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include <string>
|
||||
using namespace Math3D;
|
||||
using namespace Mtable;
|
||||
using namespace std;
|
||||
|
||||
enum TOrders
|
||||
{ // rozkazy dla AI
|
||||
@@ -378,7 +379,7 @@ class TController
|
||||
|
||||
public:
|
||||
void PhysicsLog();
|
||||
AnsiString StopReasonText();
|
||||
string StopReasonText();
|
||||
~TController();
|
||||
std::string NextStop();
|
||||
void TakeControl(bool yes);
|
||||
|
||||
220
DynObj.cpp
220
DynObj.cpp
@@ -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
|
||||
|
||||
3
DynObj.h
3
DynObj.h
@@ -23,6 +23,9 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include "AirCoupler.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
34
EvLaunch.cpp
34
EvLaunch.cpp
@@ -56,7 +56,6 @@ void TEventLauncher::Init()
|
||||
|
||||
bool TEventLauncher::Load(cParser *parser)
|
||||
{ // wczytanie wyzwalacza zdarzeñ
|
||||
AnsiString str;
|
||||
std::string token;
|
||||
parser->getTokens();
|
||||
*parser >> dRadius; // promieñ dzia³ania
|
||||
@@ -64,13 +63,12 @@ bool TEventLauncher::Load(cParser *parser)
|
||||
dRadius *= dRadius; // do kwadratu, pod warunkiem, ¿e nie jest ujemne
|
||||
parser->getTokens(); // klawisz steruj¹cy
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str != "none")
|
||||
if (token != "none")
|
||||
{
|
||||
if (str.Length() == 1)
|
||||
iKey = VkKeyScan(str[1]); // jeden znak jest konwertowany na kod klawisza
|
||||
if (token.length() == 1)
|
||||
iKey = VkKeyScan(token[1]); // jeden znak jest konwertowany na kod klawisza
|
||||
else
|
||||
iKey = str.ToIntDef(0); // a jak wiêcej, to jakby numer klawisza jest
|
||||
iKey = stol_def(token,0); // a jak wiêcej, to jakby numer klawisza jest
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> DeltaTime;
|
||||
@@ -81,31 +79,31 @@ bool TEventLauncher::Load(cParser *parser)
|
||||
iMinute = int(DeltaTime) % 100; // minuty s¹ najm³odszymi cyframi dziesietnymi
|
||||
iHour = int(DeltaTime - iMinute) / 100; // godzina to setki
|
||||
DeltaTime = 0; // bez powtórzeñ
|
||||
WriteLog("EventLauncher at " + IntToStr(iHour) + ":" +
|
||||
IntToStr(iMinute)); // wyœwietlenie czasu
|
||||
WriteLog("EventLauncher at " + to_string(iHour) + ":" +
|
||||
to_string(iMinute)); // wyœwietlenie czasu
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEvent1Name = AnsiString(token.c_str()); // pierwszy event
|
||||
asEvent1Name = token; // pierwszy event
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEvent2Name = AnsiString(token.c_str()); // drugi event
|
||||
asEvent2Name = token; // drugi event
|
||||
if ((asEvent2Name == "end") || (asEvent2Name == "condition"))
|
||||
{ // drugiego eventu mo¿e nie byæ, bo s¹ z tym problemy, ale ciii...
|
||||
str = asEvent2Name; // rozpoznane s³owo idzie do dalszego przetwarzania
|
||||
token = asEvent2Name; // rozpoznane s³owo idzie do dalszego przetwarzania
|
||||
asEvent2Name = "none"; // a drugiego eventu nie ma
|
||||
}
|
||||
else
|
||||
{ // gdy s¹ dwa eventy
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
//str = AnsiString(token.c_str());
|
||||
}
|
||||
if (str == AnsiString("condition"))
|
||||
if (token == "condition")
|
||||
{ // obs³uga wyzwalania warunkowego
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asMemCellName = AnsiString(token.c_str());
|
||||
asMemCellName = token;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
SafeDeleteArray(szText);
|
||||
@@ -118,8 +116,8 @@ bool TEventLauncher::Load(cParser *parser)
|
||||
if (token.compare("*") != 0) //*=nie braæ wartoœci 1. pod uwagê
|
||||
{
|
||||
iCheckMask |= conditional_memval1;
|
||||
str = AnsiString(token.c_str());
|
||||
fVal1 = str.ToDouble();
|
||||
//str = AnsiString(token.c_str());
|
||||
fVal1 = atof(token.c_str());
|
||||
}
|
||||
else
|
||||
fVal1 = 0;
|
||||
@@ -128,8 +126,8 @@ bool TEventLauncher::Load(cParser *parser)
|
||||
if (token.compare("*") != 0) //*=nie braæ wartoœci 2. pod uwagê
|
||||
{
|
||||
iCheckMask |= conditional_memval2;
|
||||
str = AnsiString(token.c_str());
|
||||
fVal2 = str.ToDouble();
|
||||
//str = AnsiString(token.c_str());
|
||||
fVal2 = atof(token.c_str());
|
||||
}
|
||||
else
|
||||
fVal2 = 0;
|
||||
|
||||
@@ -11,6 +11,9 @@ http://mozilla.org/MPL/2.0/.
|
||||
#define EvLaunchH
|
||||
|
||||
#include "Classes.h"
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class TEventLauncher
|
||||
{
|
||||
@@ -24,9 +27,9 @@ class TEventLauncher
|
||||
int iHour, iMinute; // minuta uruchomienia
|
||||
public:
|
||||
double dRadius;
|
||||
AnsiString asEvent1Name;
|
||||
AnsiString asEvent2Name;
|
||||
AnsiString asMemCellName;
|
||||
string asEvent1Name;
|
||||
string asEvent2Name;
|
||||
string asMemCellName;
|
||||
TEvent *Event1;
|
||||
TEvent *Event2;
|
||||
TMemCell *MemCell;
|
||||
|
||||
217
Event.cpp
217
Event.cpp
@@ -26,7 +26,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include "Ground.h"
|
||||
#pragma package(smart_init)
|
||||
|
||||
TEvent::TEvent(AnsiString m)
|
||||
TEvent::TEvent(string m)
|
||||
{
|
||||
// asName=""; //czy nazwa eventu jest niezbêdna w tym przypadku? chyba nie
|
||||
evNext = evNext2 = NULL;
|
||||
@@ -37,7 +37,7 @@ TEvent::TEvent(AnsiString m)
|
||||
// bIsHistory=false;
|
||||
fDelay = 0;
|
||||
fStartTime = 0; // 0 nie ma sensu
|
||||
Type = m.IsEmpty() ? tp_Unknown :
|
||||
Type = m.empty() ? tp_Unknown :
|
||||
tp_GetValues; // utworzenie niejawnego odczytu komórki pamiêci w torze
|
||||
for (int i = 0; i < 13; i++)
|
||||
Params[i].asPointer = NULL;
|
||||
@@ -82,37 +82,36 @@ void TEvent::Init(){
|
||||
|
||||
};
|
||||
|
||||
void TEvent::Conditions(cParser *parser, AnsiString s)
|
||||
void TEvent::Conditions(cParser *parser, string s)
|
||||
{ // przetwarzanie warunków, wspólne dla Multiple i UpdateValues
|
||||
if (s == "condition")
|
||||
{ // jesli nie "endevent"
|
||||
std::string token;
|
||||
AnsiString str;
|
||||
if (!asNodeName.IsEmpty())
|
||||
std::string token, str;
|
||||
if (!asNodeName.empty())
|
||||
{ // podczepienie ³añcucha, jeœli nie jest pusty
|
||||
Params[9].asText = new char[asNodeName.Length() + 1]; // usuwane i zamieniane na
|
||||
Params[9].asText = new char[asNodeName.length() + 1]; // usuwane i zamieniane na
|
||||
// wskaŸnik
|
||||
strcpy(Params[9].asText, asNodeName.c_str());
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str == AnsiString("trackoccupied"))
|
||||
str = token;
|
||||
if (str == "trackoccupied")
|
||||
iFlags |= conditional_trackoccupied;
|
||||
else if (str == AnsiString("trackfree"))
|
||||
else if (str == "trackfree")
|
||||
iFlags |= conditional_trackfree;
|
||||
else if (str == AnsiString("propability"))
|
||||
else if (str == "propability")
|
||||
{
|
||||
iFlags |= conditional_propability;
|
||||
parser->getTokens();
|
||||
*parser >> Params[10].asdouble;
|
||||
}
|
||||
else if (str == AnsiString("memcompare"))
|
||||
else if (str == "memcompare")
|
||||
{
|
||||
iFlags |= conditional_memcompare;
|
||||
parser->getTokens(1, false); // case sensitive
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
str = token;
|
||||
if (str != "*") //"*" - nie brac command pod uwage
|
||||
{ // zapamiêtanie ³añcucha do porównania
|
||||
Params[10].asText = new char[255];
|
||||
@@ -121,24 +120,24 @@ void TEvent::Conditions(cParser *parser, AnsiString s)
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
str = token;
|
||||
if (str != "*") //"*" - nie brac val1 pod uwage
|
||||
{
|
||||
Params[11].asdouble = str.ToDouble();
|
||||
Params[11].asdouble = atof(str.c_str());
|
||||
iFlags |= conditional_memval1;
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str != AnsiString("*")) //"*" - nie brac val2 pod uwage
|
||||
str = token;
|
||||
if (str != "*") //"*" - nie brac val2 pod uwage
|
||||
{
|
||||
Params[12].asdouble = str.ToDouble();
|
||||
Params[12].asdouble = atof(str.c_str());
|
||||
iFlags |= conditional_memval2;
|
||||
}
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
s = AnsiString(token.c_str()); // ewentualnie dalej losowe opóŸnienie
|
||||
s = token; // ewentualnie dalej losowe opóŸnienie
|
||||
}
|
||||
if (s == "randomdelay")
|
||||
{ // losowe opóŸnienie
|
||||
@@ -156,7 +155,7 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
int ti;
|
||||
double tf;
|
||||
std::string token;
|
||||
AnsiString str;
|
||||
//string str;
|
||||
char *ptr;
|
||||
|
||||
bEnabled = true; // zmieniane na false dla eventów u¿ywanych do skanowania sygna³ów
|
||||
@@ -167,49 +166,49 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
// str = AnsiString(token.c_str());
|
||||
|
||||
if (str == AnsiString("exit"))
|
||||
if (token == "exit")
|
||||
Type = tp_Exit;
|
||||
else if (str == AnsiString("updatevalues"))
|
||||
else if (token == "updatevalues")
|
||||
Type = tp_UpdateValues;
|
||||
else if (str == AnsiString("getvalues"))
|
||||
else if (token == "getvalues")
|
||||
Type = tp_GetValues;
|
||||
else if (str == AnsiString("putvalues"))
|
||||
else if (token == "putvalues")
|
||||
Type = tp_PutValues;
|
||||
else if (str == AnsiString("disable"))
|
||||
else if (token == "disable")
|
||||
Type = tp_Disable;
|
||||
else if (str == AnsiString("sound"))
|
||||
else if (token == "sound")
|
||||
Type = tp_Sound;
|
||||
else if (str == AnsiString("velocity"))
|
||||
else if (token == "velocity")
|
||||
Type = tp_Velocity;
|
||||
else if (str == AnsiString("animation"))
|
||||
else if (token == "animation")
|
||||
Type = tp_Animation;
|
||||
else if (str == AnsiString("lights"))
|
||||
else if (token == "lights")
|
||||
Type = tp_Lights;
|
||||
else if (str == AnsiString("visible"))
|
||||
else if (token == "visible")
|
||||
Type = tp_Visible; // zmiana wyœwietlania obiektu
|
||||
else if (str == AnsiString("switch"))
|
||||
else if (token == "switch")
|
||||
Type = tp_Switch;
|
||||
else if (str == AnsiString("dynvel"))
|
||||
else if (token == "dynvel")
|
||||
Type = tp_DynVel;
|
||||
else if (str == AnsiString("trackvel"))
|
||||
else if (token == "trackvel")
|
||||
Type = tp_TrackVel;
|
||||
else if (str == AnsiString("multiple"))
|
||||
else if (token == "multiple")
|
||||
Type = tp_Multiple;
|
||||
else if (str == AnsiString("addvalues"))
|
||||
else if (token == "addvalues")
|
||||
Type = tp_AddValues;
|
||||
else if (str == AnsiString("copyvalues"))
|
||||
else if (token == "copyvalues")
|
||||
Type = tp_CopyValues;
|
||||
else if (str == AnsiString("whois"))
|
||||
else if (token == "whois")
|
||||
Type = tp_WhoIs;
|
||||
else if (str == AnsiString("logvalues"))
|
||||
else if (token == "logvalues")
|
||||
Type = tp_LogValues;
|
||||
else if (str == AnsiString("voltage"))
|
||||
else if (token == "voltage")
|
||||
Type = tp_Voltage; // zmiana napiêcia w zasilaczu (TractionPowerSource)
|
||||
else if (str == AnsiString("message"))
|
||||
else if (token == "message")
|
||||
Type = tp_Message; // wyœwietlenie komunikatu
|
||||
else if (str == AnsiString("friction"))
|
||||
else if (token == "friction")
|
||||
Type = tp_Friction; // zmiana tarcia na scenerii
|
||||
else
|
||||
Type = tp_Unknown;
|
||||
@@ -219,10 +218,10 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
// str = AnsiString(token.c_str());
|
||||
|
||||
if (str != "none")
|
||||
asNodeName = str; // nazwa obiektu powi¹zanego
|
||||
if (token != "none")
|
||||
asNodeName = token; // nazwa obiektu powi¹zanego
|
||||
|
||||
if (asName.substr(0, 5) == "none_")
|
||||
Type = tp_Ignored; // Ra: takie s¹ ignorowane
|
||||
@@ -235,34 +234,34 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
// if (Type==tp_UpdateValues) iFlags=0; //co modyfikowaæ
|
||||
parser->getTokens(1, false); // case sensitive
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
Params[0].asText = new char[str.Length() + 1];
|
||||
strcpy(Params[0].asText, str.c_str());
|
||||
if (str != "*") // czy ma zostaæ bez zmian?
|
||||
// str = AnsiString(token.c_str());
|
||||
Params[0].asText = new char[token.length() + 1];
|
||||
strcpy(Params[0].asText, token.c_str());
|
||||
if (token != "*") // czy ma zostaæ bez zmian?
|
||||
iFlags |= update_memstring;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str != "*") // czy ma zostaæ bez zmian?
|
||||
// str = AnsiString(token.c_str());
|
||||
if (token != "*") // czy ma zostaæ bez zmian?
|
||||
{
|
||||
Params[1].asdouble = str.ToDouble();
|
||||
Params[1].asdouble = atof(token.c_str());
|
||||
iFlags |= update_memval1;
|
||||
}
|
||||
else
|
||||
Params[1].asdouble = 0;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str != "*") // czy ma zostaæ bez zmian?
|
||||
// str = AnsiString(token.c_str());
|
||||
if (token != "*") // czy ma zostaæ bez zmian?
|
||||
{
|
||||
Params[2].asdouble = str.ToDouble();
|
||||
Params[2].asdouble = atof(token.c_str());
|
||||
iFlags |= update_memval2;
|
||||
}
|
||||
else
|
||||
Params[2].asdouble = 0;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
Conditions(parser, token.c_str()); // sprawdzanie warunków
|
||||
Conditions(parser, token); // sprawdzanie warunków
|
||||
break;
|
||||
case tp_CopyValues:
|
||||
Params[9].asText = NULL;
|
||||
@@ -279,8 +278,8 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
strcpy(Params[9].asText, token.c_str());
|
||||
break;
|
||||
case 2: // maska wartoœci
|
||||
iFlags = AnsiString(token.c_str())
|
||||
.ToIntDef(update_memstring | update_memval1 | update_memval2);
|
||||
iFlags = stol_def(token,
|
||||
(update_memstring | update_memval1 | update_memval2));
|
||||
break;
|
||||
}
|
||||
parser->getTokens();
|
||||
@@ -297,8 +296,8 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
switch (++i)
|
||||
{ // znaczenie kolejnych parametrów
|
||||
case 1: // maska wartoœci
|
||||
iFlags = AnsiString(token.c_str())
|
||||
.ToIntDef(update_memstring | update_memval1 | update_memval2);
|
||||
iFlags = stol_def(token,
|
||||
(update_memstring | update_memval1 | update_memval2));
|
||||
break;
|
||||
}
|
||||
parser->getTokens();
|
||||
@@ -324,31 +323,31 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
// Params[12].asInt=0;
|
||||
parser->getTokens(1, false); // komendy 'case sensitive'
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str.SubString(1, 19) == "PassengerStopPoint:")
|
||||
// str = AnsiString(token.c_str());
|
||||
if (token.substr(0, 19) == "PassengerStopPoint:")
|
||||
{
|
||||
if (str.Pos("#"))
|
||||
str = str.SubString(1, str.Pos("#") - 1); // obciêcie unikatowoœci
|
||||
if (token.find("#"))
|
||||
token = token.substr(0, token.find("#") - 1); // obciêcie unikatowoœci
|
||||
bEnabled = false; // nie do kolejki (dla SetVelocity te¿, ale jak jest do toru
|
||||
// dowi¹zany)
|
||||
Params[6].asCommand = cm_PassengerStopPoint;
|
||||
}
|
||||
else if (str == "SetVelocity")
|
||||
else if (token == "SetVelocity")
|
||||
{
|
||||
bEnabled = false;
|
||||
Params[6].asCommand = cm_SetVelocity;
|
||||
}
|
||||
else if (str == "RoadVelocity")
|
||||
else if (token == "RoadVelocity")
|
||||
{
|
||||
bEnabled = false;
|
||||
Params[6].asCommand = cm_RoadVelocity;
|
||||
}
|
||||
else if (str == "SectionVelocity")
|
||||
else if (token == "SectionVelocity")
|
||||
{
|
||||
bEnabled = false;
|
||||
Params[6].asCommand = cm_SectionVelocity;
|
||||
}
|
||||
else if (str == "ShuntVelocity")
|
||||
else if (token == "ShuntVelocity")
|
||||
{
|
||||
bEnabled = false;
|
||||
Params[6].asCommand = cm_ShuntVelocity;
|
||||
@@ -358,44 +357,44 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
// bEnabled = false;
|
||||
// Params[6].asCommand = cm_SetProximityVelocity;
|
||||
//}
|
||||
else if (str == "OutsideStation")
|
||||
else if (token == "OutsideStation")
|
||||
{
|
||||
bEnabled = false; // ma byæ skanowny, aby AI nie przekracza³o W5
|
||||
Params[6].asCommand = cm_OutsideStation;
|
||||
}
|
||||
else
|
||||
Params[6].asCommand = cm_Unknown;
|
||||
Params[0].asText = new char[str.Length() + 1];
|
||||
strcpy(Params[0].asText, str.c_str());
|
||||
Params[0].asText = new char[token.length() + 1];
|
||||
strcpy(Params[0].asText, token.c_str());
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str == "none")
|
||||
// str = AnsiString(token.c_str());
|
||||
if (token == "none")
|
||||
Params[1].asdouble = 0.0;
|
||||
else
|
||||
try
|
||||
{
|
||||
Params[1].asdouble = str.ToDouble();
|
||||
Params[1].asdouble = atof(token.c_str());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
Params[1].asdouble = 0.0;
|
||||
WriteLog("Error: number expected in PutValues event, found: " + str);
|
||||
WriteLog("Error: number expected in PutValues event, found: " + token);
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str == "none")
|
||||
// str = AnsiString(token.c_str());
|
||||
if (token == "none")
|
||||
Params[2].asdouble = 0.0;
|
||||
else
|
||||
try
|
||||
{
|
||||
Params[2].asdouble = str.ToDouble();
|
||||
Params[2].asdouble = atof(token.c_str());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
Params[2].asdouble = 0.0;
|
||||
WriteLog("Error: number expected in PutValues event, found: " + str);
|
||||
WriteLog("Error: number expected in PutValues event, found: " + token);
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
@@ -408,9 +407,9 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
*parser >> token;
|
||||
if (token.compare("endevent") != 0)
|
||||
{
|
||||
str = AnsiString(token.c_str());
|
||||
// str = AnsiString(token.c_str());
|
||||
if (i < 8)
|
||||
Params[i].asdouble = str.ToDouble(); // teraz mo¿e mieæ u³amek
|
||||
Params[i].asdouble = atof(token.c_str()); // teraz mo¿e mieæ u³amek
|
||||
i++;
|
||||
}
|
||||
} while (token.compare("endevent") != 0);
|
||||
@@ -418,16 +417,16 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
case tp_Visible: // zmiana wyœwietlania obiektu
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
Params[0].asInt = str.ToInt();
|
||||
// str = AnsiString(token.c_str());
|
||||
Params[0].asInt = atoi(token.c_str());
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
break;
|
||||
case tp_Velocity:
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
Params[0].asdouble = str.ToDouble() * 0.28;
|
||||
// str = AnsiString(token.c_str());
|
||||
Params[0].asdouble = atof(token.c_str()) * 0.28;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
break;
|
||||
@@ -443,7 +442,7 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
*parser >> token;
|
||||
break;
|
||||
case tp_Exit:
|
||||
while ((ptr = strchr(asNodeName.c_str(), '_')) != NULL)
|
||||
while ((ptr = strchr(strdup(asNodeName.c_str()), '_')) != NULL)
|
||||
*ptr = ' ';
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
@@ -513,20 +512,20 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
*parser >> Params[0].asInt;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str != "endevent")
|
||||
// str = AnsiString(token.c_str());
|
||||
if (token != "endevent")
|
||||
{
|
||||
Params[1].asdouble = str.ToDouble(); // prêdkoœæ liniowa ruchu iglic
|
||||
Params[1].asdouble = atof(token.c_str()); // prêdkoœæ liniowa ruchu iglic
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
// str = AnsiString(token.c_str());
|
||||
}
|
||||
else
|
||||
Params[1].asdouble = -1.0; // u¿yæ domyœlnej
|
||||
if (str != "endevent")
|
||||
if (token != "endevent")
|
||||
{
|
||||
Params[2].asdouble =
|
||||
str.ToDouble(); // dodatkowy ruch drugiej iglicy (zamkniêcie nastawnicze)
|
||||
atof(token.c_str()); // dodatkowy ruch drugiej iglicy (zamkniêcie nastawnicze)
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
}
|
||||
@@ -550,16 +549,16 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
ti = 0; // flaga dla else
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
while (str != AnsiString("endevent") && str != AnsiString("condition") &&
|
||||
str != AnsiString("randomdelay"))
|
||||
// str = AnsiString(token.c_str());
|
||||
while (token != "endevent" && token != "condition" &&
|
||||
token != "randomdelay")
|
||||
{
|
||||
if ((str.SubString(1, 5) != "none_") ? (i < 8) : false)
|
||||
if ((token.substr(0, 5) != "none_") ? (i < 8) : false)
|
||||
{ // eventy rozpoczynaj¹ce siê od "none_" s¹ ignorowane
|
||||
if (str != "else")
|
||||
if (token != "else")
|
||||
{
|
||||
Params[i].asText = new char[255];
|
||||
strcpy(Params[i].asText, str.c_str());
|
||||
strcpy(Params[i].asText, token.c_str());
|
||||
if (ti)
|
||||
iFlags |= conditional_else << i; // oflagowanie dla eventów "else"
|
||||
i++;
|
||||
@@ -568,14 +567,14 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
ti = !ti; // zmiana flagi dla s³owa "else"
|
||||
}
|
||||
else if (i >= 8)
|
||||
ErrorLog("Bad event: \"" + string(str.c_str()) + "\" ignored in multiple \"" + asName + "\"!");
|
||||
ErrorLog("Bad event: \"" + token + "\" ignored in multiple \"" + asName + "\"!");
|
||||
else
|
||||
WriteLog("Event \"" + string(str.c_str()) + "\" ignored in multiple \"" + asName + "\"!");
|
||||
WriteLog("Event \"" + token + "\" ignored in multiple \"" + asName + "\"!");
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
// str = AnsiString(token.c_str());
|
||||
}
|
||||
Conditions(parser, str); // sprawdzanie warunków
|
||||
Conditions(parser, token); // sprawdzanie warunków
|
||||
break;
|
||||
case tp_Voltage: // zmiana napiêcia w zasilaczu (TractionPowerSource)
|
||||
case tp_Friction: // zmiana przyczepnosci na scenerii
|
||||
@@ -589,8 +588,8 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
} while (str != "endevent");
|
||||
// str = AnsiString(token.c_str());
|
||||
} while (token != "endevent");
|
||||
break;
|
||||
case tp_Ignored: // ignorowany
|
||||
case tp_Unknown: // nieznany
|
||||
@@ -598,8 +597,8 @@ void TEvent::Load(cParser *parser, vector3 *org)
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
} while (str != "endevent");
|
||||
// str = AnsiString(token.c_str());
|
||||
} while (token != "endevent");
|
||||
WriteLog("Bad event: \"" + asName +
|
||||
(Type == tp_Unknown ? "\" has unknown type." : "\" is ignored."));
|
||||
break;
|
||||
@@ -619,14 +618,14 @@ void TEvent::AddToQuery(TEvent *e)
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
AnsiString TEvent::CommandGet()
|
||||
string TEvent::CommandGet()
|
||||
{ // odczytanie komendy z eventu
|
||||
switch (Type)
|
||||
{ // to siê wykonuje równie¿ sk³adu jad¹cego bez obs³ugi
|
||||
case tp_GetValues:
|
||||
return String(Params[9].asMemCell->Text());
|
||||
return string(Params[9].asMemCell->Text());
|
||||
case tp_PutValues:
|
||||
return String(Params[0].asText);
|
||||
return string(Params[0].asText);
|
||||
}
|
||||
return ""; // inne eventy siê nie licz¹
|
||||
};
|
||||
|
||||
10
Event.h
10
Event.h
@@ -10,11 +10,13 @@ http://mozilla.org/MPL/2.0/.
|
||||
#ifndef EventH
|
||||
#define EventH
|
||||
|
||||
#include <system.hpp>
|
||||
#include "Classes.h"
|
||||
#include "dumb3d.h"
|
||||
#include <string>
|
||||
|
||||
using namespace Math3D;
|
||||
using namespace std;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
@@ -83,7 +85,7 @@ union TParam
|
||||
class TEvent // zmienne: ev*
|
||||
{ // zdarzenie
|
||||
private:
|
||||
void Conditions(cParser *parser, AnsiString s);
|
||||
void Conditions(cParser *parser, string s);
|
||||
|
||||
public:
|
||||
std::string asName;
|
||||
@@ -98,16 +100,16 @@ class TEvent // zmienne: ev*
|
||||
TDynamicObject *Activator;
|
||||
TParam Params[13]; // McZapkie-070502 //Ra: zamieniæ to na union/struct
|
||||
unsigned int iFlags; // zamiast Params[8] z flagami warunku
|
||||
AnsiString asNodeName; // McZapkie-100302 - dodalem zeby zapamietac nazwe toru
|
||||
string asNodeName; // McZapkie-100302 - dodalem zeby zapamietac nazwe toru
|
||||
TEvent *evJoined; // kolejny event z t¹ sam¹ nazw¹ - od wersji 378
|
||||
double fRandomDelay; // zakres dodatkowego opóŸnienia
|
||||
public: // metody
|
||||
TEvent(AnsiString m = "");
|
||||
TEvent(string m = "");
|
||||
~TEvent();
|
||||
void Init();
|
||||
void Load(cParser *parser, vector3 *org);
|
||||
void AddToQuery(TEvent *e);
|
||||
AnsiString CommandGet();
|
||||
string CommandGet();
|
||||
TCommandType Command();
|
||||
double ValueGet(int n);
|
||||
vector3 PositionGet();
|
||||
|
||||
54
Globals.cpp
54
Globals.cpp
@@ -24,8 +24,11 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include <Controls.hpp> //do odczytu daty
|
||||
#include "World.h"
|
||||
#include <ostream>
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <ctype.h>
|
||||
#include <cctype>
|
||||
|
||||
// namespace Global {
|
||||
|
||||
// parametry do u¿ytku wewnêtrznego
|
||||
@@ -123,7 +126,7 @@ double Global::fMoveLight = -1; // ruchome
|
||||
double Global::fLatitudeDeg = 52.0; // szerokoϾ geograficzna
|
||||
float Global::fFriction = 1.0; // mno¿nik tarcia - KURS90
|
||||
double Global::fBrakeStep = 1.0; // krok zmiany hamulca dla klawiszy [Num3] i [Num9]
|
||||
std::string Global::asLang = "pl"; // domyœlny jêzyk - http://tools.ietf.org/html/bcp47
|
||||
AnsiString Global::asLang = "pl"; // domyœlny jêzyk - http://tools.ietf.org/html/bcp47
|
||||
|
||||
// parametry wydajnoœciowe (np. regulacja FPS, szybkoœæ wczytywania)
|
||||
bool Global::bAdjustScreenFreq = true;
|
||||
@@ -215,16 +218,19 @@ void Global::LoadIniFile(std::string asFileName)
|
||||
pFreeCameraInit[i] = vector3(0, 0, 0); // wspó³rzêdne w scenerii
|
||||
pFreeCameraInitAngle[i] = vector3(0, 0, 0); // k¹ty obrotu w radianach
|
||||
}
|
||||
TFileStream *fs;
|
||||
fs = new TFileStream(asFileName, fmOpenRead | fmShareCompat);
|
||||
if (!fs)
|
||||
return;
|
||||
std::string str = "";
|
||||
int size = fs->Size;
|
||||
str.SetLength(size);
|
||||
fs->Read(str.c_str(), size);
|
||||
ifstream f = ifstream(asFileName.c_str());
|
||||
stringstream buffer;
|
||||
buffer << f.rdbuf();
|
||||
//TFileStream *fs;
|
||||
// fs = new TFileStream(asFileName, fmOpenRead | fmShareCompat);
|
||||
// if (!fs)
|
||||
// return;
|
||||
AnsiString str = AnsiString(buffer.str().c_str());
|
||||
//int size = fs->Size;
|
||||
//str.SetLength(size);
|
||||
//fs->Read(str.c_str(), size);
|
||||
// str+="";
|
||||
delete fs;
|
||||
//delete fs;
|
||||
TQueryParserComp *Parser;
|
||||
Parser = new TQueryParserComp(NULL);
|
||||
Parser->TextToParse = str;
|
||||
@@ -251,7 +257,7 @@ void Global::ConfigParse(TQueryParserComp *qp, cParser *cp)
|
||||
else if (str == AnsiString("humanctrlvehicle"))
|
||||
{
|
||||
str = GetNextSymbol().LowerCase();
|
||||
asHumanCtrlVehicle = str;
|
||||
asHumanCtrlVehicle = string(str.c_str());
|
||||
}
|
||||
else if (str == AnsiString("width"))
|
||||
iWindowWidth = GetNextSymbol().ToInt();
|
||||
@@ -801,9 +807,9 @@ void TTranscripts::AddLine(char *txt, float show, float hide, bool it)
|
||||
aLines[j].fHide = hide; // wyœwietlaæ do
|
||||
aLines[j].bItalic = it;
|
||||
aLines[j].asText = std::string(txt); // bez sensu, wystarczy³by wskaŸnik
|
||||
if ((k = aLines[j].asText.Pos("|")) > 0)
|
||||
if ((k = aLines[j].asText.find("|")) != std::string::npos)
|
||||
{ // jak jest podzia³ linijki na wiersze
|
||||
aLines[j].asText = aLines[j].asText.SubString(1, k - 1);
|
||||
aLines[j].asText = aLines[j].asText.substr(0, k - 1);
|
||||
txt += k;
|
||||
i = j; // kolejna linijka dopisywana bêdzie na koniec w³aœnie dodanej
|
||||
}
|
||||
@@ -988,6 +994,28 @@ std::string to_hex_str(double _Val, int precision, int width)
|
||||
return o.str();
|
||||
};
|
||||
|
||||
int stol_def(const std::string &str, const int &DefaultValue)
|
||||
{
|
||||
// this function was developed iteratively on Codereview.stackexchange
|
||||
// with the assistance of @Corbin
|
||||
std::size_t len = str.size();
|
||||
while (std::isspace(str[len - 1]))
|
||||
len--;
|
||||
if (len == 0)
|
||||
return DefaultValue;
|
||||
errno = 0;
|
||||
char *s = new char[len + 1];
|
||||
std::strncpy(s, str.c_str(), len);
|
||||
char *p;
|
||||
int result = strtol(s, &p, 0);
|
||||
if ((*p != '\0') || (errno != 0))
|
||||
{
|
||||
return DefaultValue;
|
||||
}
|
||||
delete s;
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string ToLower(std::string text)
|
||||
{
|
||||
std::transform(text.begin(), text.end(), text.begin(), ::tolower);
|
||||
|
||||
@@ -308,7 +308,7 @@ class Global
|
||||
static bool bSmudge; // czy wyœwietlaæ smugê, a pojazd u¿ytkownika na koñcu
|
||||
static std::string asTranscript[5]; // napisy na ekranie (widoczne)
|
||||
static TTranscripts tranTexts; // obiekt obs³uguj¹cy stenogramy dŸwiêków na ekranie
|
||||
static std::string asLang; // domyœlny jêzyk - http://tools.ietf.org/html/bcp47
|
||||
static AnsiString asLang; // domyœlny jêzyk - http://tools.ietf.org/html/bcp47
|
||||
static int iHiddenEvents; // czy ³¹czyæ eventy z torami poprzez nazwê toru
|
||||
static TTextSound *tsRadioBusy[10]; // zajêtoœæ kana³ów radiowych (wskaŸnik na odgrywany dŸwiêk)
|
||||
static int iPoKeysPWM[7]; // numery wejϾ dla PWM
|
||||
@@ -335,6 +335,7 @@ class Global
|
||||
std::string to_string(double _Val, int precision, int width);
|
||||
std::string to_hex_str(int _Val, int precision = 0, int width = 0);
|
||||
|
||||
int stol_def(const std::string & str, const int & DefaultValue);
|
||||
|
||||
std::string ToLower(std::string text);
|
||||
std::string ToUpper(std::string text);
|
||||
|
||||
322
Ground.cpp
322
Ground.cpp
@@ -46,7 +46,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
#pragma package(smart_init)
|
||||
|
||||
bool bCondition; // McZapkie: do testowania warunku na event multiple
|
||||
AnsiString LogComment;
|
||||
string LogComment;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Obiekt renderuj¹cy siatkê jest sztucznie tworzonym obiektem pomocniczym,
|
||||
@@ -1403,10 +1403,10 @@ TGroundNode * TGround::FindGroundNode(std::string asNameToFind, TGroundNodeType
|
||||
double fTrainSetVel = 0;
|
||||
double fTrainSetDir = 0;
|
||||
double fTrainSetDist = 0; // odleg³oœæ sk³adu od punktu 1 w stronê punktu 2
|
||||
AnsiString asTrainSetTrack = "";
|
||||
string asTrainSetTrack = "";
|
||||
int iTrainSetConnection = 0;
|
||||
bool bTrainSet = false;
|
||||
AnsiString asTrainName = "";
|
||||
string asTrainName = "";
|
||||
int iTrainSetWehicleNumber = 0;
|
||||
TGroundNode *nTrainSetNode = NULL; // poprzedni pojazd do ³¹czenia
|
||||
TGroundNode *nTrainSetDriver = NULL; // pojazd, któremu zostanie wys³any rozk³ad
|
||||
@@ -1543,7 +1543,7 @@ void TGround::RaTriangleDivider(TGroundNode *node)
|
||||
TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
{ // wczytanie wpisu typu "node"
|
||||
// parser->LoadTraction=Global::bLoadTraction; //Ra: tu nie potrzeba powtarzaæ
|
||||
AnsiString str, str1, str2, str3, str4, Skin, DriverType, asNodeName;
|
||||
string str, str1, str2, str3, str4, Skin, DriverType, asNodeName;
|
||||
int nv, ti, i, n;
|
||||
double tf, r, rmin, tf1, tf2, tf3, tf4, l, dist, mgn;
|
||||
int int1, int2;
|
||||
@@ -1559,13 +1559,14 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
*parser >> r >> rmin;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asNodeName = AnsiString(token.c_str());
|
||||
asNodeName = token;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
str = token;
|
||||
//str = AnsiString(token.c_str());
|
||||
TGroundNode *tmp, *tmp2;
|
||||
tmp = new TGroundNode();
|
||||
tmp->asName = (asNodeName == AnsiString("none") ? AnsiString("") : asNodeName);
|
||||
tmp->asName = (asNodeName == "none" ? string("") : asNodeName);
|
||||
if (r >= 0)
|
||||
tmp->fSquareRadius = r * r;
|
||||
tmp->fSquareMinRadius = rmin * rmin;
|
||||
@@ -1604,12 +1605,12 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
// WriteLog("-> node "+str+" "+tmp->asName);
|
||||
if (bError)
|
||||
{
|
||||
Error(AnsiString("Scene parse error near " + str).c_str());
|
||||
Error("Scene parse error near " + str);
|
||||
for (int i = 0; i < 60; ++i)
|
||||
{ // Ra: skopiowanie dalszej czêœci do logu - taka prowizorka, lepsza ni¿ nic
|
||||
parser->getTokens(); // pobranie linijki tekstu nie dzia³a
|
||||
*parser >> token;
|
||||
WriteLog(token.c_str());
|
||||
WriteLog(token);
|
||||
}
|
||||
// if (tmp==RootNode) RootNode=NULL;
|
||||
delete tmp;
|
||||
@@ -1621,7 +1622,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
tmp->hvTraction = new TTraction();
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
tmp->hvTraction->asPowerSupplyName = AnsiString(token.c_str()); // nazwa zasilacza
|
||||
tmp->hvTraction->asPowerSupplyName = token; // nazwa zasilacza
|
||||
parser->getTokens(3);
|
||||
*parser >> tmp->hvTraction->NominalVoltage >> tmp->hvTraction->MaxCurrent >>
|
||||
tmp->hvTraction->fResistivity;
|
||||
@@ -1688,7 +1689,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
{ // jawne wskazanie innego przês³a, na które mo¿e przestawiæ siê pantograf
|
||||
parser->getTokens();
|
||||
*parser >> token; // wypada³o by to zapamiêtaæ...
|
||||
tmp->hvTraction->asParallel = AnsiString(token.c_str());
|
||||
tmp->hvTraction->asParallel = token;
|
||||
parser->getTokens();
|
||||
*parser >> token; // a tu ju¿ powinien byæ koniec
|
||||
}
|
||||
@@ -1714,7 +1715,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
tmp->pCenter += pOrigin;
|
||||
tmp->MemCell = new TMemCell(&tmp->pCenter);
|
||||
tmp->MemCell->Load(parser);
|
||||
if (!tmp->asName.IsEmpty()) // jest pusta gdy "none"
|
||||
if (!tmp->asName.empty()) // jest pusta gdy "none"
|
||||
{ // dodanie do wyszukiwarki
|
||||
if (sTracks->Update(TP_MEMCELL, tmp->asName.c_str(),
|
||||
tmp)) // najpierw sprawdziæ, czy ju¿ jest
|
||||
@@ -1737,11 +1738,11 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
case TP_TRACK:
|
||||
tmp->pTrack = new TTrack(tmp);
|
||||
if (Global::iWriteLogEnabled & 4)
|
||||
if (!tmp->asName.IsEmpty())
|
||||
WriteLog(tmp->asName.c_str());
|
||||
if (!tmp->asName.empty())
|
||||
WriteLog(tmp->asName);
|
||||
tmp->pTrack->Load(parser, pOrigin,
|
||||
tmp->asName); // w nazwie mo¿e byæ nazwa odcinka izolowanego
|
||||
if (!tmp->asName.IsEmpty()) // jest pusta gdy "none"
|
||||
if (!tmp->asName.empty()) // jest pusta gdy "none"
|
||||
{ // dodanie do wyszukiwarki
|
||||
if (sTracks->Update(TP_TRACK, tmp->asName.c_str(),
|
||||
tmp)) // najpierw sprawdziæ, czy ju¿ jest
|
||||
@@ -1766,8 +1767,9 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
tmp->pCenter += pOrigin;
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
tmp->tsStaticSound->Init(str.c_str(), sqrt(tmp->fSquareRadius), tmp->pCenter.x,
|
||||
str = token;
|
||||
//str = AnsiString(token.c_str());
|
||||
tmp->tsStaticSound->Init(strdup(str.c_str()), sqrt(tmp->fSquareRadius), tmp->pCenter.x,
|
||||
tmp->pCenter.y, tmp->pCenter.z, false, rmin);
|
||||
if (rmin < 0.0)
|
||||
rmin =
|
||||
@@ -1783,14 +1785,14 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
// tmp->DynamicObject->Load(Parser);
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str1 = AnsiString(token.c_str()); // katalog
|
||||
str1 = token; // katalog
|
||||
// McZapkie: doszedl parametr ze zmienialna skora
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
Skin = AnsiString(token.c_str()); // tekstura wymienna
|
||||
Skin = token; // tekstura wymienna
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str3 = AnsiString(token.c_str()); // McZapkie-131102: model w MMD
|
||||
str3 = token; // McZapkie-131102: model w MMD
|
||||
if (bTrainSet)
|
||||
{ // jeœli pojazd jest umieszczony w sk³adzie
|
||||
str = asTrainSetTrack;
|
||||
@@ -1798,22 +1800,22 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
*parser >> tf1; // Ra: -1 oznacza odwrotne wstawienie, normalnie w sk³adzie 0
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
DriverType = AnsiString(token.c_str()); // McZapkie:010303 - w przyszlosci rozne
|
||||
DriverType = token; // McZapkie:010303 - w przyszlosci rozne
|
||||
// konfiguracje mechanik/pomocnik itp
|
||||
tf3 = fTrainSetVel; // prêdkoœæ
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str4 = AnsiString(token.c_str());
|
||||
int2 = str4.Pos("."); // yB: wykorzystuje tutaj zmienna, ktora potem bedzie ladunkiem
|
||||
if (int2 > 0) // yB: jesli znalazl kropke, to ja przetwarza jako parametry
|
||||
str4 = token;
|
||||
int2 = str4.find("."); // yB: wykorzystuje tutaj zmienna, ktora potem bedzie ladunkiem
|
||||
if (int2 != string::npos) // yB: jesli znalazl kropke, to ja przetwarza jako parametry
|
||||
{
|
||||
int dlugosc = str4.Length();
|
||||
int1 = str4.SubString(1, int2 - 1).ToInt(); // niech sprzegiem bedzie do kropki cos
|
||||
str4 = str4.SubString(int2 + 1, dlugosc - int2);
|
||||
int dlugosc = str4.length();
|
||||
int1 = atoi(str4.substr(0, int2 - 1).c_str()); // niech sprzegiem bedzie do kropki cos
|
||||
str4 = str4.substr(int2 + 1, dlugosc - int2);
|
||||
}
|
||||
else
|
||||
{
|
||||
int1 = str4.ToInt();
|
||||
int1 = atoi(str4.c_str());
|
||||
str4 = "";
|
||||
}
|
||||
int2 = 0; // zeruje po wykorzystaniu
|
||||
@@ -1834,12 +1836,12 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
// sk³adu (trainset)
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str()); // track
|
||||
str = token; // track
|
||||
parser->getTokens();
|
||||
*parser >> tf1; // Ra: -1 oznacza odwrotne wstawienie
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
DriverType = AnsiString(token.c_str()); // McZapkie:010303: obsada
|
||||
DriverType = token; // McZapkie:010303: obsada
|
||||
parser->getTokens();
|
||||
*parser >>
|
||||
tf3; // prêdkoœæ, niektórzy wpisuj¹ tu "3" jako sprzêg, ¿eby nie by³o tabliczki
|
||||
@@ -1852,8 +1854,8 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
{ // je¿eli ³adunku jest wiêcej ni¿ 0, to rozpoznajemy jego typ
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str2 = AnsiString(token.c_str()); // LoadType
|
||||
if (str2 == AnsiString("enddynamic")) // idiotoodpornoœæ: ³adunek bez podanego typu
|
||||
str2 = token; // LoadType
|
||||
if (str2 == "enddynamic") // idiotoodpornoœæ: ³adunek bez podanego typu
|
||||
{
|
||||
str2 = "";
|
||||
int2 = 0; // iloœæ bez typu siê nie liczy jako ³adunek
|
||||
@@ -1917,7 +1919,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
if (tmp)
|
||||
tmp->DynamicObject->asDestination = AnsiString(token.c_str());
|
||||
tmp->DynamicObject->asDestination = token;
|
||||
*parser >> token;
|
||||
}
|
||||
if (token.compare("enddynamic") != 0)
|
||||
@@ -1987,7 +1989,7 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
// tmp->nNode[i].asName=
|
||||
}
|
||||
}
|
||||
else if (!tmp->asName.IsEmpty()) // jest pusta gdy "none"
|
||||
else if (!tmp->asName.empty()) // jest pusta gdy "none"
|
||||
{ // dodanie do wyszukiwarki
|
||||
if (sTracks->Update(TP_MODEL, tmp->asName.c_str(),
|
||||
tmp)) // najpierw sprawdziæ, czy ju¿ jest
|
||||
@@ -2051,12 +2053,12 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
}
|
||||
str = AnsiString(token.c_str());
|
||||
str = token;
|
||||
#ifdef _PROBLEND
|
||||
// PROBLEND Q: 13122011 - Szociu: 27012012
|
||||
PROBLEND = true; // domyslnie uruchomione nowe wyœwietlanie
|
||||
tmp->PROBLEND = true; // odwolanie do tgroundnode, bo rendering jest w tej klasie
|
||||
if (str.Pos("@") > 0) // sprawdza, czy w nazwie tekstury jest znak "@"
|
||||
if (str.find("@") != string::npos) // sprawdza, czy w nazwie tekstury jest znak "@"
|
||||
{
|
||||
PROBLEND = false; // jeœli jest, wyswietla po staremu
|
||||
tmp->PROBLEND = false;
|
||||
@@ -2174,8 +2176,8 @@ TGroundNode * TGround::AddGroundNode(cParser *parser)
|
||||
*parser >> token;
|
||||
do
|
||||
{
|
||||
str = AnsiString(token.c_str());
|
||||
TempVerts[i].Point.x = str.ToDouble();
|
||||
str = token;
|
||||
TempVerts[i].Point.x = atof(str.c_str());
|
||||
parser->getTokens(2);
|
||||
*parser >> TempVerts[i].Point.y >> TempVerts[i].Point.z;
|
||||
TempVerts[i].Point.RotateZ(aRotate.z / 180 * M_PI);
|
||||
@@ -2223,7 +2225,7 @@ TSubRect * TGround::GetSubRect(int iCol, int iRow)
|
||||
return (Rects[br][bc].SafeGetRect(sc, sr)); // pobranie ma³ego kwadratu
|
||||
}
|
||||
|
||||
TEvent * TGround::FindEvent(const AnsiString &asEventName)
|
||||
TEvent * TGround::FindEvent(const string &asEventName)
|
||||
{
|
||||
return (TEvent *)sTracks->Find(0, asEventName.c_str()); // wyszukiwanie w drzewie
|
||||
/* //powolna wyszukiwarka
|
||||
@@ -2236,15 +2238,15 @@ TEvent * TGround::FindEvent(const AnsiString &asEventName)
|
||||
*/
|
||||
}
|
||||
|
||||
TEvent * TGround::FindEventScan(const AnsiString &asEventName)
|
||||
TEvent * TGround::FindEventScan(const string &asEventName)
|
||||
{ // wyszukanie eventu z opcj¹ utworzenia niejawnego dla komórek skanowanych
|
||||
TEvent *e = (TEvent *)sTracks->Find(0, asEventName.c_str()); // wyszukiwanie w drzewie eventów
|
||||
if (e)
|
||||
return e; // jak istnieje, to w porz¹dku
|
||||
if (asEventName.SubString(asEventName.Length() - 4, 5) ==
|
||||
if (asEventName.substr(asEventName.length() - 4, 5) ==
|
||||
":scan") // jeszcze mo¿e byæ event niejawny
|
||||
{ // no to szukamy komórki pamiêci o nazwie zawartej w evencie
|
||||
AnsiString n = asEventName.SubString(1, asEventName.Length() - 5); // do dwukropka
|
||||
string n = asEventName.substr(0, asEventName.length() - 5); // do dwukropka
|
||||
if (sTracks->Find(TP_MEMCELL, n.c_str())) // jeœli jest takowa komórka pamiêci
|
||||
e = new TEvent(n); // utworzenie niejawnego eventu jej odczytu
|
||||
}
|
||||
@@ -2269,13 +2271,13 @@ void TGround::FirstInit()
|
||||
srGlobal.NodeAdd(Current); // dodanie do globalnego obiektu
|
||||
else if (i == TP_TERRAIN)
|
||||
{ // specjalne przetwarzanie terenu wczytanego z pliku E3D
|
||||
AnsiString xxxzzz; // nazwa kwadratu
|
||||
string xxxzzz; // nazwa kwadratu
|
||||
TGroundRect *gr;
|
||||
for (j = 1; j < Current->iCount; ++j)
|
||||
{ // od 1 do koñca s¹ zestawy trójk¹tów
|
||||
xxxzzz = AnsiString(Current->nNode[j].smTerrain->pName); // pobranie nazwy
|
||||
gr = GetRect(1000 * (xxxzzz.SubString(1, 3).ToIntDef(0) - 500),
|
||||
1000 * (xxxzzz.SubString(4, 3).ToIntDef(0) - 500));
|
||||
xxxzzz = string(Current->nNode[j].smTerrain->pName); // pobranie nazwy
|
||||
gr = GetRect(1000 * (stol_def(xxxzzz.substr(0, 3),0) - 500),
|
||||
1000 * (stol_def(xxxzzz.substr(3, 3),0) - 500));
|
||||
if (Global::bUseVBO)
|
||||
gr->nTerrain = Current->nNode + j; // zapamiêtanie
|
||||
else
|
||||
@@ -2364,13 +2366,13 @@ void TGround::FirstInit()
|
||||
|
||||
bool TGround::Init(std::string asFile, HDC hDC)
|
||||
{ // g³ówne wczytywanie scenerii
|
||||
if (AnsiString(asFile.c_str()).LowerCase().SubString(1, 7) == "scenery")
|
||||
AnsiString(asFile.c_str()).Delete(1, 8); // Ra: usuniêcie niepotrzebnych znaków - zgodnoœæ wstecz z 2003
|
||||
if (ToLower(asFile).substr(0, 7) == "scenery")
|
||||
asFile = asFile.erase(0, 8); // Ra: usuniêcie niepotrzebnych znaków - zgodnoœæ wstecz z 2003
|
||||
WriteLog("Loading scenery from " + asFile);
|
||||
Global::pGround = this;
|
||||
// pTrain=NULL;
|
||||
pOrigin = aRotate = vector3(0, 0, 0); // zerowanie przesuniêcia i obrotu
|
||||
AnsiString str = "";
|
||||
string str = "";
|
||||
// TFileStream *fs;
|
||||
// int size;
|
||||
std::string subpath = Global::asCurrentSceneryPath; // "scenery/";
|
||||
@@ -2423,8 +2425,8 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
}
|
||||
else
|
||||
++refresh;
|
||||
str = AnsiString(token.c_str());
|
||||
if (str == AnsiString("node"))
|
||||
str = token;
|
||||
if (str == "node")
|
||||
{
|
||||
LastNode = AddGroundNode(&parser); // rozpoznanie wêz³a
|
||||
if (LastNode)
|
||||
@@ -2477,11 +2479,11 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
}
|
||||
else
|
||||
{
|
||||
Error("Scene parse error near " + AnsiString(token.c_str()));
|
||||
Error("Scene parse error near " + token);
|
||||
// break;
|
||||
}
|
||||
}
|
||||
else if (str == AnsiString("trainset"))
|
||||
else if (str == "trainset")
|
||||
{
|
||||
iTrainSetWehicleNumber = 0;
|
||||
nTrainSetNode = NULL;
|
||||
@@ -2489,14 +2491,14 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
bTrainSet = true;
|
||||
parser.getTokens();
|
||||
parser >> token;
|
||||
asTrainName = AnsiString(token.c_str()); // McZapkie: rodzaj+nazwa pociagu w SRJP
|
||||
asTrainName = token; // McZapkie: rodzaj+nazwa pociagu w SRJP
|
||||
parser.getTokens();
|
||||
parser >> token;
|
||||
asTrainSetTrack = AnsiString(token.c_str()); //œcie¿ka startowa
|
||||
asTrainSetTrack = token; //œcie¿ka startowa
|
||||
parser.getTokens(2);
|
||||
parser >> fTrainSetDist >> fTrainSetVel; // przesuniêcie i prêdkoœæ
|
||||
}
|
||||
else if (str == AnsiString("endtrainset"))
|
||||
else if (str == "endtrainset")
|
||||
{ // McZapkie-110103: sygnaly konca pociagu ale tylko dla pociagow rozkladowych
|
||||
if (nTrainSetNode) // trainset bez dynamic siê sypa³
|
||||
{ // powinien te¿ tu wchodziæ, gdy pojazd bez trainset
|
||||
@@ -2523,7 +2525,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
nTrainSetNode = nTrainSetDriver = NULL;
|
||||
iTrainSetWehicleNumber = 0;
|
||||
}
|
||||
else if (str == AnsiString("event"))
|
||||
else if (str == "event")
|
||||
{
|
||||
TEvent *tmp = new TEvent();
|
||||
tmp->Load(&parser, &pOrigin);
|
||||
@@ -2534,25 +2536,25 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
TEvent *found = FindEvent(tmp->asName);
|
||||
if (found)
|
||||
{ // jeœli znaleziony duplikat
|
||||
int i = tmp->asName.Length();
|
||||
int i = tmp->asName.length();
|
||||
if (tmp->asName[1] == '#') // zawsze jeden znak co najmniej jest
|
||||
{
|
||||
delete tmp;
|
||||
tmp = NULL;
|
||||
} // utylizacja duplikatu z krzy¿ykiem
|
||||
else if (i > 8 ? tmp->asName.SubString(1, 9) == "lineinfo:" :
|
||||
else if (i > 8 ? tmp->asName.substr(0, 9) == "lineinfo:" :
|
||||
false) // tymczasowo wyj¹tki
|
||||
{
|
||||
delete tmp;
|
||||
tmp = NULL;
|
||||
} // tymczasowa utylizacja duplikatów W5
|
||||
else if (i > 8 ? tmp->asName.SubString(i - 7, 8) == "_warning" :
|
||||
else if (i > 8 ? tmp->asName.substr(i - 7, 8) == "_warning" :
|
||||
false) // tymczasowo wyj¹tki
|
||||
{
|
||||
delete tmp;
|
||||
tmp = NULL;
|
||||
} // tymczasowa utylizacja duplikatu z tr¹bieniem
|
||||
else if (i > 4 ? tmp->asName.SubString(i - 3, 4) == "_shp" :
|
||||
else if (i > 4 ? tmp->asName.substr(i - 3, 4) == "_shp" :
|
||||
false) // nie podlegaj¹ logowaniu
|
||||
{
|
||||
delete tmp;
|
||||
@@ -2579,8 +2581,8 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
{ // jeœli nazwa wyst¹pi³a, to do kolejki i wyszukiwarki dodawany jest tylko
|
||||
// pierwszy
|
||||
if (RootEvent->Type != tp_Ignored)
|
||||
if (RootEvent->asName.Pos(
|
||||
"onstart")) // event uruchamiany automatycznie po starcie
|
||||
if (RootEvent->asName.find(
|
||||
"onstart") != string::npos) // event uruchamiany automatycznie po starcie
|
||||
AddToQuery(RootEvent, NULL); // dodanie do kolejki
|
||||
sTracks->Add(0, tmp->asName.c_str(), tmp); // dodanie do wyszukiwarki
|
||||
}
|
||||
@@ -2592,7 +2594,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
// {
|
||||
// Include(Parser);
|
||||
// }
|
||||
else if (str == AnsiString("rotate"))
|
||||
else if (str == "rotate")
|
||||
{
|
||||
// parser.getTokens(3);
|
||||
// parser >> aRotate.x >> aRotate.y >> aRotate.z; //Ra: to potrafi dawaæ b³êdne
|
||||
@@ -2606,14 +2608,14 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
// WriteLog("*** rotate "+AnsiString(aRotate.x)+" "+AnsiString(aRotate.y)+"
|
||||
// "+AnsiString(aRotate.z));
|
||||
}
|
||||
else if (str == AnsiString("origin"))
|
||||
else if (str == "origin")
|
||||
{
|
||||
// str=Parser->GetNextSymbol().LowerCase();
|
||||
// if (str=="begin")
|
||||
{
|
||||
if (OriginStackTop >= OriginStackMaxDepth - 1)
|
||||
{
|
||||
MessageBox(0, AnsiString("Origin stack overflow ").c_str(), "Error", MB_OK);
|
||||
MessageBox(0, "Origin stack overflow ", "Error", MB_OK);
|
||||
break;
|
||||
}
|
||||
parser.getTokens(3);
|
||||
@@ -2623,14 +2625,14 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
OriginStackTop++; // zwiêkszenie wskaŸnika stosu
|
||||
}
|
||||
}
|
||||
else if (str == AnsiString("endorigin"))
|
||||
else if (str == "endorigin")
|
||||
{
|
||||
// else
|
||||
// if (str=="end")
|
||||
{
|
||||
if (OriginStackTop <= 0)
|
||||
{
|
||||
MessageBox(0, AnsiString("Origin stack underflow ").c_str(), "Error", MB_OK);
|
||||
MessageBox(0, "Origin stack underflow ", "Error", MB_OK);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2638,7 +2640,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
pOrigin -= OriginStack[OriginStackTop];
|
||||
}
|
||||
}
|
||||
else if (str == AnsiString("atmo")) // TODO: uporzadkowac gdzie maja byc parametry mgly!
|
||||
else if (str == "atmo") // TODO: uporzadkowac gdzie maja byc parametry mgly!
|
||||
{ // Ra: ustawienie parametrów OpenGL przeniesione do FirstInit
|
||||
WriteLog("Scenery atmo definition");
|
||||
parser.getTokens(3);
|
||||
@@ -2658,7 +2660,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
parser >> token;
|
||||
}
|
||||
}
|
||||
else if (str == AnsiString("time"))
|
||||
else if (str == "time")
|
||||
{
|
||||
WriteLog("Scenery time definition");
|
||||
char temp_in[9];
|
||||
@@ -2708,7 +2710,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
parser >> token;
|
||||
}
|
||||
}
|
||||
else if (str == AnsiString("light"))
|
||||
else if (str == "light")
|
||||
{ // Ra: ustawianie œwiat³a przeniesione do FirstInit
|
||||
WriteLog("Scenery light definition");
|
||||
vector3 lp;
|
||||
@@ -2749,7 +2751,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
parser >> token;
|
||||
} while (token.compare("endlight") != 0);
|
||||
}
|
||||
else if (str == AnsiString("camera"))
|
||||
else if (str == "camera")
|
||||
{
|
||||
vector3 xyz, abc;
|
||||
xyz = abc = vector3(0, 0, 0); // wartoœci domyœlne, bo nie wszystie musz¹ byæ
|
||||
@@ -2795,7 +2797,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
Global::iCameraLast = into; // numer ostatniej
|
||||
}
|
||||
}
|
||||
else if (str == AnsiString("sky"))
|
||||
else if (str == "sky")
|
||||
{ // youBy - niebo z pliku
|
||||
WriteLog("Scenery sky definition");
|
||||
parser.getTokens();
|
||||
@@ -2810,9 +2812,9 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
} while (token.compare("endsky") != 0);
|
||||
WriteLog(Global::asSky.c_str());
|
||||
}
|
||||
else if (str == AnsiString("firstinit"))
|
||||
else if (str == "firstinit")
|
||||
FirstInit();
|
||||
else if (str == AnsiString("description"))
|
||||
else if (str == "description")
|
||||
{
|
||||
do
|
||||
{
|
||||
@@ -2820,7 +2822,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
parser >> token;
|
||||
} while (token.compare("enddescription") != 0);
|
||||
}
|
||||
else if (str == AnsiString("test"))
|
||||
else if (str == "test")
|
||||
{ // wypisywanie treœci po przetworzeniu
|
||||
WriteLog("---> Parser test:");
|
||||
do
|
||||
@@ -2831,15 +2833,15 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
} while (token.compare("endtest") != 0);
|
||||
WriteLog("---> End of parser test.");
|
||||
}
|
||||
else if (str == AnsiString("config"))
|
||||
else if (str == "config")
|
||||
{ // mo¿liwoœæ przedefiniowania parametrów w scenerii
|
||||
Global::ConfigParse(NULL, &parser); // parsowanie dodatkowych ustawieñ
|
||||
}
|
||||
else if (str != AnsiString(""))
|
||||
else if (str != "")
|
||||
{ // pomijanie od nierozpoznanej komendy do jej zakoñczenia
|
||||
if ((token.length() > 2) && (atof(token.c_str()) == 0.0))
|
||||
{ // jeœli nie liczba, to spróbowaæ pomin¹æ komendê
|
||||
WriteLog(AnsiString("Unrecognized command: " + str));
|
||||
WriteLog("Unrecognized command: " + str);
|
||||
str = "end" + str;
|
||||
do
|
||||
{
|
||||
@@ -2849,9 +2851,9 @@ bool TGround::Init(std::string asFile, HDC hDC)
|
||||
} while ((token != "") && (token.compare(str.c_str()) != 0));
|
||||
}
|
||||
else // jak liczba to na pewno b³¹d
|
||||
Error(AnsiString("Unrecognized command: " + str));
|
||||
Error("Unrecognized command: " + str);
|
||||
}
|
||||
else if (str == AnsiString(""))
|
||||
else if (str == "")
|
||||
break;
|
||||
|
||||
// LastNode=NULL;
|
||||
@@ -2896,7 +2898,7 @@ bool TGround::InitEvents()
|
||||
if (trk)
|
||||
Current->Params[9].asTrack = trk->pTrack;
|
||||
if (!Current->Params[9].asTrack)
|
||||
ErrorLog("Bad event: track \"" + AnsiString(Current->asNodeName) +
|
||||
ErrorLog("Bad event: track \"" + Current->asNodeName +
|
||||
"\" does not exists in \"" + Current->asName + "\"");
|
||||
}
|
||||
Current->Params[4].nGroundNode = tmp;
|
||||
@@ -2904,7 +2906,7 @@ bool TGround::InitEvents()
|
||||
if (Current->iFlags & (conditional_memcompare))
|
||||
Current->Params[9].asMemCell = tmp->MemCell; // komórka do badania warunku
|
||||
if (!tmp->MemCell->asTrackName
|
||||
.IsEmpty()) // tor powi¹zany z komórk¹ powi¹zan¹ z eventem
|
||||
.empty()) // tor powi¹zany z komórk¹ powi¹zan¹ z eventem
|
||||
{ // tu potrzebujemy wskaŸnik do komórki w (tmp)
|
||||
trk = FindGroundNode(tmp->MemCell->asTrackName, TP_TRACK);
|
||||
if (trk)
|
||||
@@ -2924,7 +2926,7 @@ bool TGround::InitEvents()
|
||||
}
|
||||
break;
|
||||
case tp_LogValues: // skojarzenie z memcell
|
||||
if (Current->asNodeName.IsEmpty())
|
||||
if (Current->asNodeName.empty())
|
||||
{ // brak skojarzenia daje logowanie wszystkich
|
||||
Current->Params[9].asMemCell = NULL;
|
||||
break;
|
||||
@@ -2955,7 +2957,7 @@ bool TGround::InitEvents()
|
||||
Current->Params[4].nGroundNode = tmp;
|
||||
Current->Params[5].asMemCell = tmp->MemCell; // komórka docelowa
|
||||
if (!tmp->MemCell->asTrackName
|
||||
.IsEmpty()) // tor powi¹zany z komórk¹ powi¹zan¹ z eventem
|
||||
.empty()) // tor powi¹zany z komórk¹ powi¹zan¹ z eventem
|
||||
{ // tu potrzebujemy wskaŸnik do komórki w (tmp)
|
||||
trk = FindGroundNode(tmp->MemCell->asTrackName, TP_TRACK);
|
||||
if (trk)
|
||||
@@ -2982,7 +2984,7 @@ bool TGround::InitEvents()
|
||||
}
|
||||
else
|
||||
ErrorLog("Bad copyvalues: event \"" + Current->asName +
|
||||
"\" cannot find memcell \"" + AnsiString(buff) + "\"");
|
||||
"\" cannot find memcell \"" + buff + "\"");
|
||||
break;
|
||||
case tp_Animation: // animacja modelu
|
||||
tmp = FindGroundNode(Current->asNodeName, TP_MODEL); // egzemplarza modelu do animowania
|
||||
@@ -3004,7 +3006,7 @@ bool TGround::InitEvents()
|
||||
if (!Current->Params[9]
|
||||
.asAnimContainer->Event()) // nie szukaæ, gdy znaleziony
|
||||
Current->Params[9].asAnimContainer->EventAssign(
|
||||
FindEvent(Current->asNodeName + "." + AnsiString(buff) + ":done"));
|
||||
FindEvent(Current->asNodeName + "." + buff + ":done"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3064,7 +3066,7 @@ bool TGround::InitEvents()
|
||||
Current->asNodeName = "";
|
||||
break;
|
||||
case tp_TrackVel: // ustawienie prêdkoœci na torze
|
||||
if (!Current->asNodeName.IsEmpty())
|
||||
if (!Current->asNodeName.empty())
|
||||
{
|
||||
tmp = FindGroundNode(Current->asNodeName, TP_TRACK);
|
||||
if (tmp)
|
||||
@@ -3109,7 +3111,7 @@ bool TGround::InitEvents()
|
||||
Current->Params[9].asTrack = tmp->pTrack;
|
||||
if (!Current->Params[9].asTrack)
|
||||
{
|
||||
ErrorLog(AnsiString("Bad event: Track \"") + AnsiString(buff) +
|
||||
ErrorLog("Bad event: Track \"" + string(buff) +
|
||||
"\" does not exist in \"" + Current->asName + "\"");
|
||||
Current->iFlags &=
|
||||
~(conditional_trackoccupied | conditional_trackfree); // zerowanie flag
|
||||
@@ -3123,8 +3125,8 @@ bool TGround::InitEvents()
|
||||
Current->Params[9].asMemCell = tmp->MemCell;
|
||||
if (!Current->Params[9].asMemCell)
|
||||
{
|
||||
ErrorLog(AnsiString("Bad event: MemCell \"") + AnsiString(buff) +
|
||||
AnsiString("\" does not exist in \"" + Current->asName + "\""));
|
||||
ErrorLog("Bad event: MemCell \"" + string(buff) +
|
||||
"\" does not exist in \"" + Current->asName + "\"");
|
||||
Current->iFlags &=
|
||||
~(conditional_memstring | conditional_memval1 | conditional_memval2);
|
||||
}
|
||||
@@ -3137,18 +3139,18 @@ bool TGround::InitEvents()
|
||||
SafeDeleteArray(Current->Params[i].asText);
|
||||
Current->Params[i].asEvent = FindEvent(buff);
|
||||
if (!Current->Params[i].asEvent) // Ra: tylko w logu informacja o braku
|
||||
if (AnsiString(Current->Params[i].asText).SubString(1, 5) != "none_")
|
||||
if (string(Current->Params[i].asText).substr(0, 5) != "none_")
|
||||
{
|
||||
WriteLog(AnsiString("Event \"") + AnsiString(buff) +
|
||||
AnsiString("\" does not exist"));
|
||||
ErrorLog("Missed event: " + AnsiString(buff) + " in multiple " +
|
||||
WriteLog("Event \"" + string(buff) +
|
||||
"\" does not exist");
|
||||
ErrorLog("Missed event: " + string(buff) + " in multiple " +
|
||||
Current->asName);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case tp_Voltage: // zmiana napiêcia w zasilaczu (TractionPowerSource)
|
||||
if (!Current->asNodeName.IsEmpty())
|
||||
if (!Current->asNodeName.empty())
|
||||
{
|
||||
tmp = FindGroundNode(Current->asNodeName,
|
||||
TP_TRACTIONPOWERSOURCE); // pod³¹czenie zasilacza
|
||||
@@ -3179,42 +3181,42 @@ void TGround::InitTracks()
|
||||
TTrack *tmp; // znaleziony tor
|
||||
TTrack *Track;
|
||||
int iConnection, state;
|
||||
AnsiString name;
|
||||
string name;
|
||||
// tracks=tracksfar=0;
|
||||
for (Current = nRootOfType[TP_TRACK]; Current; Current = Current->nNext)
|
||||
{
|
||||
Track = Current->pTrack;
|
||||
if (Global::iHiddenEvents & 1)
|
||||
if (!Current->asName.IsEmpty())
|
||||
if (!Current->asName.empty())
|
||||
{ // jeœli podana jest nazwa torów, mo¿na szukaæ eventów skojarzonych przez nazwê
|
||||
if (Track->asEvent0Name.IsEmpty())
|
||||
if (Track->asEvent0Name.empty())
|
||||
if (FindEvent(Current->asName + ":event0"))
|
||||
Track->asEvent0Name = Current->asName + ":event0";
|
||||
if (Track->asEvent1Name.IsEmpty())
|
||||
if (Track->asEvent1Name.empty())
|
||||
if (FindEvent(Current->asName + ":event1"))
|
||||
Track->asEvent1Name = Current->asName + ":event1";
|
||||
if (Track->asEvent2Name.IsEmpty())
|
||||
if (Track->asEvent2Name.empty())
|
||||
if (FindEvent(Current->asName + ":event2"))
|
||||
Track->asEvent2Name = Current->asName + ":event2";
|
||||
|
||||
if (Track->asEventall0Name.IsEmpty())
|
||||
if (Track->asEventall0Name.empty())
|
||||
if (FindEvent(Current->asName + ":eventall0"))
|
||||
Track->asEventall0Name = Current->asName + ":eventall0";
|
||||
if (Track->asEventall1Name.IsEmpty())
|
||||
if (Track->asEventall1Name.empty())
|
||||
if (FindEvent(Current->asName + ":eventall1"))
|
||||
Track->asEventall1Name = Current->asName + ":eventall1";
|
||||
if (Track->asEventall2Name.IsEmpty())
|
||||
if (Track->asEventall2Name.empty())
|
||||
if (FindEvent(Current->asName + ":eventall2"))
|
||||
Track->asEventall2Name = Current->asName + ":eventall2";
|
||||
}
|
||||
Track->AssignEvents(
|
||||
Track->asEvent0Name.IsEmpty() ? NULL : FindEvent(Track->asEvent0Name),
|
||||
Track->asEvent1Name.IsEmpty() ? NULL : FindEventScan(Track->asEvent1Name),
|
||||
Track->asEvent2Name.IsEmpty() ? NULL : FindEventScan(Track->asEvent2Name));
|
||||
Track->asEvent0Name.empty() ? NULL : FindEvent(Track->asEvent0Name),
|
||||
Track->asEvent1Name.empty() ? NULL : FindEventScan(Track->asEvent1Name),
|
||||
Track->asEvent2Name.empty() ? NULL : FindEventScan(Track->asEvent2Name));
|
||||
Track->AssignallEvents(
|
||||
Track->asEventall0Name.IsEmpty() ? NULL : FindEvent(Track->asEventall0Name),
|
||||
Track->asEventall1Name.IsEmpty() ? NULL : FindEvent(Track->asEventall1Name),
|
||||
Track->asEventall2Name.IsEmpty() ? NULL :
|
||||
Track->asEventall0Name.empty() ? NULL : FindEvent(Track->asEventall0Name),
|
||||
Track->asEventall1Name.empty() ? NULL : FindEvent(Track->asEventall1Name),
|
||||
Track->asEventall2Name.empty() ? NULL :
|
||||
FindEvent(Track->asEventall2Name)); // MC-280503
|
||||
switch (Track->eType)
|
||||
{
|
||||
@@ -3314,9 +3316,9 @@ void TGround::InitTracks()
|
||||
break;
|
||||
}
|
||||
name = Track->IsolatedName(); // pobranie nazwy odcinka izolowanego
|
||||
if (!name.IsEmpty()) // jeœli zosta³a zwrócona nazwa
|
||||
if (!name.empty()) // jeœli zosta³a zwrócona nazwa
|
||||
Track->IsolatedEventsAssign(FindEvent(name + ":busy"), FindEvent(name + ":free"));
|
||||
if (Current->asName.SubString(1, 1) ==
|
||||
if (Current->asName.substr(0, 1) ==
|
||||
"*") // mo¿liwy portal, jeœli nie pod³¹czony od striny 1
|
||||
if (!Track->CurrentPrev() && Track->CurrentNext())
|
||||
Track->iCategoryFlag |= 0x100; // ustawienie flagi portalu
|
||||
@@ -3353,7 +3355,7 @@ void TGround::InitTraction()
|
||||
TTraction *tmp; // znalezione przês³o
|
||||
TTraction *Traction;
|
||||
int iConnection;
|
||||
AnsiString name;
|
||||
string name;
|
||||
for (nCurrent = nRootOfType[TP_TRACTION]; nCurrent; nCurrent = nCurrent->nNext)
|
||||
{ // pod³¹czenie do zasilacza, ¿eby mo¿na by³o sumowaæ pr¹d kilku pojazdów
|
||||
// a jednoczeœnie z jednego miejsca zmieniaæ napiêcie eventem
|
||||
@@ -3412,9 +3414,9 @@ void TGround::InitTraction()
|
||||
}
|
||||
else // jeœli obie to sekcje albo obie podstacje, to bêdzie b³¹d
|
||||
ErrorLog("Bad power: at " +
|
||||
FloatToStrF(Traction->pPoint1.x, ffFixed, 6, 2) + " " +
|
||||
FloatToStrF(Traction->pPoint1.y, ffFixed, 6, 2) + " " +
|
||||
FloatToStrF(Traction->pPoint1.z, ffFixed, 6, 2));
|
||||
to_string(Traction->pPoint1.x, 2, 6) + " " +
|
||||
to_string(Traction->pPoint1.y, 2, 6) + " " +
|
||||
to_string(Traction->pPoint1.z, 2, 6));
|
||||
}
|
||||
}
|
||||
if (!Traction->hvNext[1]) // tylko jeœli jeszcze nie pod³¹czony
|
||||
@@ -3446,9 +3448,9 @@ void TGround::InitTraction()
|
||||
}
|
||||
else // jeœli obie to sekcje albo obie podstacje, to bêdzie b³¹d
|
||||
ErrorLog("Bad power: at " +
|
||||
FloatToStrF(Traction->pPoint2.x, ffFixed, 6, 2) + " " +
|
||||
FloatToStrF(Traction->pPoint2.y, ffFixed, 6, 2) + " " +
|
||||
FloatToStrF(Traction->pPoint2.z, ffFixed, 6, 2));
|
||||
to_string(Traction->pPoint2.x, 2, 6) + " " +
|
||||
to_string(Traction->pPoint2.y, 2, 6) + " " +
|
||||
to_string(Traction->pPoint2.z, 2, 6));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3483,7 +3485,7 @@ void TGround::InitTraction()
|
||||
for (nCurrent = nRootOfType[TP_TRACTION]; nCurrent; nCurrent = nCurrent->nNext)
|
||||
{ //³¹czenie bie¿ni wspólnych, w tym oznaczanie niepodanych jawnie
|
||||
Traction = nCurrent->hvTraction;
|
||||
if (!Traction->asParallel.IsEmpty()) // bêdzie wskaŸnik na inne przês³o
|
||||
if (!Traction->asParallel.empty()) // bêdzie wskaŸnik na inne przês³o
|
||||
if ((Traction->asParallel == "none") ||
|
||||
(Traction->asParallel == "*")) // jeœli nieokreœlone
|
||||
Traction->iLast =
|
||||
@@ -3598,7 +3600,7 @@ bool TGround::InitLaunchers()
|
||||
{
|
||||
EventLauncher = Current->EvLaunch;
|
||||
if (EventLauncher->iCheckMask != 0)
|
||||
if (EventLauncher->asMemCellName != AnsiString("none"))
|
||||
if (EventLauncher->asMemCellName != "none")
|
||||
{ // jeœli jest powi¹zana komórka pamiêci
|
||||
tmp = FindGroundNode(EventLauncher->asMemCellName, TP_MEMCELL);
|
||||
if (tmp)
|
||||
@@ -3608,10 +3610,10 @@ bool TGround::InitLaunchers()
|
||||
}
|
||||
else
|
||||
EventLauncher->MemCell = NULL;
|
||||
EventLauncher->Event1 = (EventLauncher->asEvent1Name != AnsiString("none")) ?
|
||||
EventLauncher->Event1 = (EventLauncher->asEvent1Name != "none") ?
|
||||
FindEvent(EventLauncher->asEvent1Name) :
|
||||
NULL;
|
||||
EventLauncher->Event2 = (EventLauncher->asEvent2Name != AnsiString("none")) ?
|
||||
EventLauncher->Event2 = (EventLauncher->asEvent2Name != "none") ?
|
||||
FindEvent(EventLauncher->asEvent2Name) :
|
||||
NULL;
|
||||
}
|
||||
@@ -3786,15 +3788,15 @@ bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node)
|
||||
&Event->Params[4].nGroundNode->pCenter);
|
||||
//if (DebugModeFlag)
|
||||
WriteLog("EVENT EXECUTED: AddValues & Track command - " +
|
||||
AnsiString(Event->Params[0].asText) + " " +
|
||||
AnsiString(Event->Params[1].asdouble) + " " +
|
||||
AnsiString(Event->Params[2].asdouble));
|
||||
string(Event->Params[0].asText) + " " +
|
||||
to_string(Event->Params[1].asdouble) + " " +
|
||||
to_string(Event->Params[2].asdouble));
|
||||
}
|
||||
//else if (DebugModeFlag)
|
||||
WriteLog("EVENT EXECUTED: AddValues - " +
|
||||
AnsiString(Event->Params[0].asText) + " " +
|
||||
AnsiString(Event->Params[1].asdouble) + " " +
|
||||
AnsiString(Event->Params[2].asdouble));
|
||||
string(Event->Params[0].asText) + " " +
|
||||
to_string(Event->Params[1].asdouble) + " " +
|
||||
to_string(Event->Params[2].asdouble));
|
||||
}
|
||||
Event =
|
||||
Event
|
||||
@@ -3803,7 +3805,7 @@ bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node)
|
||||
if (Event)
|
||||
{ // standardowe dodanie do kolejki
|
||||
WriteLog("EVENT ADDED TO QUEUE: " + Event->asName +
|
||||
(Node ? AnsiString(" by " + Node->asName) : AnsiString("")));
|
||||
(Node ? (" by " + Node->asName) : string("")));
|
||||
Event->fStartTime =
|
||||
fabs(Event->fDelay) + Timer::GetTime(); // czas od uruchomienia scenerii
|
||||
if (Event->fRandomDelay > 0.0)
|
||||
@@ -3842,45 +3844,45 @@ bool TGround::EventConditon(TEvent *e)
|
||||
if (tmpEvent->Params[9].asMemCell->Compare(e->Params[10].asText, e->Params[11].asdouble,
|
||||
e->Params[12].asdouble, e->iFlags))
|
||||
{ //logowanie spe³nionych warunków
|
||||
LogComment = e->Params[9].asMemCell->Text() + AnsiString(" ") +
|
||||
FloatToStrF(e->Params[9].asMemCell->Value1(), ffFixed, 8, 2) + " " +
|
||||
FloatToStrF(tmpEvent->Params[9].asMemCell->Value2(), ffFixed, 8, 2) +
|
||||
LogComment = e->Params[9].asMemCell->Text() + string(" ") +
|
||||
to_string(e->Params[9].asMemCell->Value1(), 2, 8) + " " +
|
||||
to_string(tmpEvent->Params[9].asMemCell->Value2(), 2, 8) +
|
||||
" = ";
|
||||
if (TestFlag(e->iFlags, conditional_memstring))
|
||||
LogComment += AnsiString(tmpEvent->Params[10].asText);
|
||||
LogComment += string(tmpEvent->Params[10].asText);
|
||||
else
|
||||
LogComment += "*";
|
||||
if (TestFlag(tmpEvent->iFlags, conditional_memval1))
|
||||
LogComment += " " + FloatToStrF(tmpEvent->Params[11].asdouble, ffFixed, 8, 2);
|
||||
LogComment += " " + to_string(tmpEvent->Params[11].asdouble, 2, 8);
|
||||
else
|
||||
LogComment += " *";
|
||||
if (TestFlag(tmpEvent->iFlags, conditional_memval2))
|
||||
LogComment += " " + FloatToStrF(tmpEvent->Params[12].asdouble, ffFixed, 8, 2);
|
||||
LogComment += " " + to_string(tmpEvent->Params[12].asdouble, 2, 8);
|
||||
else
|
||||
LogComment += " *";
|
||||
WriteLog(LogComment.c_str());
|
||||
WriteLog(LogComment);
|
||||
return true;
|
||||
}
|
||||
//else if (Global::iWriteLogEnabled && DebugModeFlag) //zawsze bo to bardzo istotne w debugowaniu scenariuszy
|
||||
else
|
||||
{ // nie zgadza siê, wiêc sprawdzmy, co
|
||||
LogComment = e->Params[9].asMemCell->Text() + AnsiString(" ") +
|
||||
FloatToStrF(e->Params[9].asMemCell->Value1(), ffFixed, 8, 2) + " " +
|
||||
FloatToStrF(tmpEvent->Params[9].asMemCell->Value2(), ffFixed, 8, 2) +
|
||||
LogComment = e->Params[9].asMemCell->Text() + string(" ") +
|
||||
to_string(e->Params[9].asMemCell->Value1(), 2, 8) + " " +
|
||||
to_string(tmpEvent->Params[9].asMemCell->Value2(), 2, 8) +
|
||||
" != ";
|
||||
if (TestFlag(e->iFlags, conditional_memstring))
|
||||
LogComment += AnsiString(tmpEvent->Params[10].asText);
|
||||
LogComment += (tmpEvent->Params[10].asText);
|
||||
else
|
||||
LogComment += "*";
|
||||
if (TestFlag(tmpEvent->iFlags, conditional_memval1))
|
||||
LogComment += " " + FloatToStrF(tmpEvent->Params[11].asdouble, ffFixed, 8, 2);
|
||||
LogComment += " " + to_string(tmpEvent->Params[11].asdouble, 2, 8);
|
||||
else
|
||||
LogComment += " *";
|
||||
if (TestFlag(tmpEvent->iFlags, conditional_memval2))
|
||||
LogComment += " " + FloatToStrF(tmpEvent->Params[12].asdouble, ffFixed, 8, 2);
|
||||
LogComment += " " + to_string(tmpEvent->Params[12].asdouble, 2, 8);
|
||||
else
|
||||
LogComment += " *";
|
||||
WriteLog(LogComment.c_str());
|
||||
WriteLog(LogComment);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -3950,8 +3952,8 @@ bool TGround::CheckQuery()
|
||||
if (tmpEvent->bEnabled)
|
||||
{ // w zasadzie te wy³¹czone s¹ skanowane i nie powinny siê nigdy w kolejce znaleŸæ
|
||||
WriteLog("EVENT LAUNCHED: " + tmpEvent->asName +
|
||||
(tmpEvent->Activator ? AnsiString(" by " + tmpEvent->Activator->asName) :
|
||||
AnsiString("")));
|
||||
(tmpEvent->Activator ? string(" by " + tmpEvent->Activator->asName) :
|
||||
string("")));
|
||||
switch (tmpEvent->Type)
|
||||
{
|
||||
case tp_CopyValues: // skopiowanie wartoœci z innej komórki
|
||||
@@ -4149,7 +4151,7 @@ bool TGround::CheckQuery()
|
||||
{ // jeœli pytanie o ³adunek
|
||||
if (tmpEvent->iFlags & update_memadd) // jeœli typ pojazdu
|
||||
tmpEvent->Params[9].asMemCell->UpdateValues(
|
||||
tmpEvent->Activator->MoverParameters->TypeName.c_str(), // typ pojazdu
|
||||
strdup(tmpEvent->Activator->MoverParameters->TypeName.c_str()), // typ pojazdu
|
||||
0, // na razie nic
|
||||
0, // na razie nic
|
||||
tmpEvent->iFlags &
|
||||
@@ -4157,8 +4159,8 @@ bool TGround::CheckQuery()
|
||||
else // jeœli parametry ³adunku
|
||||
tmpEvent->Params[9].asMemCell->UpdateValues(
|
||||
tmpEvent->Activator->MoverParameters->LoadType != "" ?
|
||||
tmpEvent->Activator->MoverParameters->LoadType.c_str() :
|
||||
"none", // nazwa ³adunku
|
||||
strdup(tmpEvent->Activator->MoverParameters->LoadType.c_str()) :
|
||||
(char*)"none", // nazwa ³adunku
|
||||
tmpEvent->Activator->MoverParameters->Load, // aktualna iloϾ
|
||||
tmpEvent->Activator->MoverParameters->MaxLoad, // maksymalna iloϾ
|
||||
tmpEvent->iFlags &
|
||||
@@ -4167,7 +4169,7 @@ bool TGround::CheckQuery()
|
||||
else if (tmpEvent->iFlags & update_memadd)
|
||||
{ // jeœli miejsce docelowe pojazdu
|
||||
tmpEvent->Params[9].asMemCell->UpdateValues(
|
||||
tmpEvent->Activator->asDestination.c_str(), // adres docelowy
|
||||
strdup(tmpEvent->Activator->asDestination.c_str()), // adres docelowy
|
||||
tmpEvent->Activator->DirectionGet(), // kierunek pojazdu wzglêdem czo³a
|
||||
// sk³adu (1=zgodny,-1=przeciwny)
|
||||
tmpEvent->Activator->MoverParameters
|
||||
@@ -4192,14 +4194,14 @@ bool TGround::CheckQuery()
|
||||
if (tmpEvent->Params[9].asMemCell) // jeœli by³a podana nazwa komórki
|
||||
WriteLog("Memcell \"" + tmpEvent->asNodeName + "\": " +
|
||||
tmpEvent->Params[9].asMemCell->Text() + " " +
|
||||
tmpEvent->Params[9].asMemCell->Value1() + " " +
|
||||
tmpEvent->Params[9].asMemCell->Value2());
|
||||
to_string(tmpEvent->Params[9].asMemCell->Value1()) + " " +
|
||||
to_string(tmpEvent->Params[9].asMemCell->Value2()));
|
||||
else // lista wszystkich
|
||||
for (TGroundNode *Current = nRootOfType[TP_MEMCELL]; Current;
|
||||
Current = Current->nNext)
|
||||
WriteLog("Memcell \"" + Current->asName + "\": " +
|
||||
Current->MemCell->Text() + " " + Current->MemCell->Value1() + " " +
|
||||
Current->MemCell->Value2());
|
||||
Current->MemCell->Text() + " " + to_string(Current->MemCell->Value1()) + " " +
|
||||
to_string(Current->MemCell->Value2()));
|
||||
break;
|
||||
case tp_Voltage: // zmiana napiêcia w zasilaczu (TractionPowerSource)
|
||||
if (tmpEvent->Params[9].psPower)
|
||||
@@ -4494,11 +4496,11 @@ bool TGround::GetTraction(TDynamicObject *model)
|
||||
if (DebugModeFlag)
|
||||
ErrorLog(
|
||||
"Pant. break: at " +
|
||||
FloatToStrF(pant0.x, ffFixed, 7, 2) +
|
||||
to_string(pant0.x, 2, 7) +
|
||||
" " +
|
||||
FloatToStrF(pant0.y, ffFixed, 7, 2) +
|
||||
to_string(pant0.y, 2, 7) +
|
||||
" " +
|
||||
FloatToStrF(pant0.z, ffFixed, 7, 2));
|
||||
to_string(pant0.z, 2, 7));
|
||||
}
|
||||
}
|
||||
else if (fVertical < p->PantTraction) // ale ni¿ej, ni¿
|
||||
@@ -5095,7 +5097,7 @@ void TGround::TerrainWrite()
|
||||
{ // Ra: zapisywanie trójk¹tów terenu do pliku E3D
|
||||
if (Global::pTerrainCompact->TerrainLoaded())
|
||||
return; // jeœli zosta³o wczytane, to nie ma co dalej robiæ
|
||||
if (Global::asTerrainModel.IsEmpty())
|
||||
if (Global::asTerrainModel.empty())
|
||||
return;
|
||||
// Trójk¹ty s¹ zapisywane kwadratami kilometrowymi.
|
||||
// Kwadrat 500500 jest na œrodku (od 0.0 do 1000.0 na OX oraz OZ).
|
||||
@@ -5178,7 +5180,7 @@ void TGround::TerrainWrite()
|
||||
break;
|
||||
}
|
||||
}
|
||||
m->SaveToBinFile(AnsiString("models\\" + Global::asTerrainModel).c_str());
|
||||
m->SaveToBinFile(strdup(("models\\" + Global::asTerrainModel).c_str()));
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@@ -5188,7 +5190,7 @@ void TGround::TrackBusyList()
|
||||
TTrack *Track;
|
||||
AnsiString name;
|
||||
for (Current = nRootOfType[TP_TRACK]; Current; Current = Current->nNext)
|
||||
if (!Current->asName.IsEmpty()) // musi byæ nazwa
|
||||
if (!Current->asName.empty()) // musi byæ nazwa
|
||||
if (Current->pTrack->iNumDynamics) // osi to chyba nie ma jak policzyæ
|
||||
WyslijString(Current->asName, 8); // zajêty
|
||||
};
|
||||
|
||||
6
Ground.h
6
Ground.h
@@ -14,8 +14,10 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include "ResourceManager.h"
|
||||
#include "VBO.h"
|
||||
#include "Classes.h"
|
||||
#include <string>
|
||||
|
||||
using namespace Math3D;
|
||||
using namespace std;
|
||||
|
||||
// Ra: zmniejszone liczby, aby zrobić tabelkę i zoptymalizować wyszukiwanie
|
||||
const int TP_MODEL = 10;
|
||||
@@ -381,8 +383,8 @@ class TGround
|
||||
{
|
||||
return (x / fSubRectSize + fHalfTotalNumSubRects);
|
||||
};
|
||||
TEvent * FindEvent(const AnsiString &asEventName);
|
||||
TEvent * FindEventScan(const AnsiString &asEventName);
|
||||
TEvent * FindEvent(const string &asEventName);
|
||||
TEvent * FindEventScan(const string &asEventName);
|
||||
void TrackJoin(TGroundNode *Current);
|
||||
|
||||
private:
|
||||
|
||||
20
Logs.cpp
20
Logs.cpp
@@ -81,7 +81,7 @@ void ErrorLog(const char *str)
|
||||
if (!errors.is_open())
|
||||
{
|
||||
errors.open("errors.txt", std::ios::trunc);
|
||||
errors << AnsiString("EU07.EXE " + Global::asRelease).c_str() << "\n";
|
||||
errors << "EU07.EXE " + Global::asRelease << "\n";
|
||||
}
|
||||
if (str)
|
||||
errors << str;
|
||||
@@ -92,11 +92,25 @@ void ErrorLog(const char *str)
|
||||
void Error(const AnsiString &asMessage, bool box)
|
||||
{
|
||||
if (box)
|
||||
MessageBox(NULL, asMessage.c_str(), AnsiString("EU07 " + Global::asRelease).c_str(), MB_OK);
|
||||
MessageBox(NULL, asMessage.c_str(), string("EU07 " + Global::asRelease).c_str(), MB_OK);
|
||||
WriteLog(asMessage.c_str());
|
||||
}
|
||||
|
||||
void ErrorLog(const std::string &str, bool newline = true)
|
||||
void Error(const std::string &asMessage, bool box)
|
||||
{
|
||||
if (box)
|
||||
MessageBox(NULL, asMessage.c_str(), string("EU07 " + Global::asRelease).c_str(), MB_OK);
|
||||
WriteLog(asMessage.c_str());
|
||||
}
|
||||
|
||||
void Error(const char* &asMessage, bool box)
|
||||
{
|
||||
if (box)
|
||||
MessageBox(NULL, asMessage, string("EU07 " + Global::asRelease).c_str(), MB_OK);
|
||||
WriteLog(asMessage);
|
||||
}
|
||||
|
||||
void ErrorLog(const std::string &str, bool newline)
|
||||
{
|
||||
ErrorLog(str.c_str());
|
||||
WriteLog(str.c_str(), newline);
|
||||
|
||||
2
Logs.h
2
Logs.h
@@ -17,6 +17,8 @@ void WriteConsoleOnly(const char *str, bool newline = true);
|
||||
void WriteLog(const char *str, double value);
|
||||
void WriteLog(const char *str, bool newline = true);
|
||||
void Error(const AnsiString &asMessage, bool box = true);
|
||||
void Error(const std::string &asMessage, bool box = true);
|
||||
void Error(const char* &asMessage, bool box = true);
|
||||
void ErrorLog(const std::string &str, bool newline = true);
|
||||
//void ErrorLog(const AnsiString &asMessage);
|
||||
void WriteLog(const AnsiString &str, bool newline = true);
|
||||
|
||||
@@ -172,7 +172,7 @@ static int const sound_relay = 16;
|
||||
static int const sound_manyrelay = 32;
|
||||
static int const sound_brakeacc = 64;
|
||||
|
||||
static bool const PhysicActivationFlag = false;
|
||||
static bool PhysicActivationFlag = false;
|
||||
|
||||
//szczególne typy pojazdów (inna obsługa) dla zmiennej TrainType
|
||||
//zamienione na flagi bitowe, aby szybko wybierać grupę (np. EZT+SZT)
|
||||
@@ -879,7 +879,7 @@ public:
|
||||
int iProblem; // flagi problemów z taborem, aby AI nie musiało porównywać; 0=może jechać
|
||||
int iLights[2]; // bity zapalonych świateł tutaj, żeby dało się liczyć pobór prądu
|
||||
private:
|
||||
double CouplerDist(Byte Coupler);
|
||||
double CouplerDist(int Coupler);
|
||||
|
||||
public:
|
||||
TMoverParameters(double VelInitial, std::string TypeNameInit, std::string NameInit, int LoadInitial, std::string LoadTypeInitial, int Cab);
|
||||
@@ -1050,7 +1050,7 @@ public:
|
||||
TPowerType PowerDecode(std::string s); //Q 20160719
|
||||
TEngineTypes EngineDecode(std::string s); //Q 20160721
|
||||
bool CreateBrakeSys(); //Q 20160722
|
||||
bool CheckLocomotiveParametersQ(bool ReadyFlag, int Dir);
|
||||
bool CheckLocomotiveParameters(bool ReadyFlag, int Dir);
|
||||
std::string EngineDescription(int what);
|
||||
};
|
||||
|
||||
|
||||
@@ -52,6 +52,39 @@ double sqr(double val) // SQR() zle liczylo w current() ...
|
||||
return val * val;
|
||||
}
|
||||
|
||||
double ComputeCollision(double v1, double v2, double m1, double m2, double beta, bool vc)
|
||||
{ // oblicza zmiane predkosci i przyrost pedu wskutek kolizji
|
||||
if (v1 < v2 && vc)
|
||||
return 0;
|
||||
else
|
||||
{
|
||||
double sum = m1 + m2;
|
||||
double w1 = ((m1 - m2) * v1 + 2 * m2 * v2) / sum;
|
||||
double w2 = ((m2 - m1) * v2 + 2 * m1 * v1) / sum;
|
||||
v1 = w1 * sqrt(1 - beta); // niejawna zmiana predkosci wskutek zderzenia
|
||||
v2 = w2 * sqrt(1 - beta);
|
||||
return m1 * (w2 - w1) * (1 - beta);
|
||||
}
|
||||
}
|
||||
|
||||
int DirPatch(int Coupler1, int Coupler2)
|
||||
{
|
||||
return (Coupler1 != Coupler2 ? 1 : -1);
|
||||
}
|
||||
|
||||
int DirF(int CouplerN)
|
||||
{
|
||||
switch (CouplerN)
|
||||
{
|
||||
case 0:
|
||||
return -1;
|
||||
case 1:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// *************************************************************************************************
|
||||
// Q: 20160716
|
||||
// *************************************************************************************************
|
||||
@@ -284,7 +317,7 @@ TMoverParameters::TMoverParameters(double VelInitial, std::string TypeNameInit,
|
||||
BrakeCtrlPosNo = 0;
|
||||
LightsPosNo = 0;
|
||||
LightsDefPos = 1;
|
||||
for (k = -1; k < Hamulce::MainBrakeMaxPos; k++)
|
||||
for (k = -1; k < MainBrakeMaxPos; k++)
|
||||
{
|
||||
BrakePressureTable[k].PipePressureVal = 0;
|
||||
BrakePressureTable[k].BrakePressureVal = 0;
|
||||
@@ -2464,9 +2497,9 @@ bool TMoverParameters::DecBrakeLevelOld(void)
|
||||
bool TMoverParameters::IncLocalBrakeLevel(int CtrlSpeed)
|
||||
{
|
||||
bool IBL;
|
||||
if ((LocalBrakePos < Hamulce::LocalBrakePosNo) /*and (BrakeCtrlPos<1)*/)
|
||||
if ((LocalBrakePos < LocalBrakePosNo) /*and (BrakeCtrlPos<1)*/)
|
||||
{
|
||||
while ((LocalBrakePos < Hamulce::LocalBrakePosNo) && (CtrlSpeed > 0))
|
||||
while ((LocalBrakePos < LocalBrakePosNo) && (CtrlSpeed > 0))
|
||||
{
|
||||
LocalBrakePos++;
|
||||
CtrlSpeed--;
|
||||
@@ -2508,9 +2541,9 @@ bool TMoverParameters::DecLocalBrakeLevel(int CtrlSpeed)
|
||||
bool TMoverParameters::IncLocalBrakeLevelFAST(void)
|
||||
{
|
||||
bool ILBLF;
|
||||
if (LocalBrakePos < Hamulce::LocalBrakePosNo)
|
||||
if (LocalBrakePos < LocalBrakePosNo)
|
||||
{
|
||||
LocalBrakePos = Hamulce::LocalBrakePosNo;
|
||||
LocalBrakePos = LocalBrakePosNo;
|
||||
ILBLF = true;
|
||||
}
|
||||
else
|
||||
@@ -2972,7 +3005,7 @@ void TMoverParameters::UpdatePipePressure(double dt)
|
||||
if ((BrakeCtrlPosNo > 1) && (ActiveCab != 0))
|
||||
// with BrakePressureTable[BrakeCtrlPos] do
|
||||
{
|
||||
dpLocalValve = LocHandle->GetPF(LocalBrakePos / Hamulce::LocalBrakePosNo, Hamulec->GetBCP(),
|
||||
dpLocalValve = LocHandle->GetPF(LocalBrakePos / LocalBrakePosNo, Hamulec->GetBCP(),
|
||||
ScndPipePress, dt, 0);
|
||||
if ((BrakeHandle == FV4a) &&
|
||||
((PipePress < 2.75) && ((Hamulec->GetStatus() && b_rls) == 0)) &&
|
||||
@@ -5378,25 +5411,25 @@ int nSize;
|
||||
|
||||
int ti(std::string val)
|
||||
{
|
||||
return StrToInt(val);
|
||||
return atoi(val.c_str());
|
||||
}
|
||||
|
||||
double td(std::string val)
|
||||
{
|
||||
return val.ToDouble();
|
||||
return atof(val.c_str());
|
||||
}
|
||||
|
||||
std::string ts(std::string val)
|
||||
{
|
||||
// WriteLog("["+ val + "]");
|
||||
|
||||
return (std::string(val));
|
||||
return val;
|
||||
// else return "unknown";
|
||||
}
|
||||
|
||||
std::string tS(std::string val)
|
||||
{
|
||||
return (val.UpperCase());
|
||||
return ToUpper(val);
|
||||
}
|
||||
|
||||
// *************************************************************************************************
|
||||
@@ -6768,7 +6801,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
|
||||
// Q: 20160717
|
||||
// *************************************************************************************************
|
||||
|
||||
bool TMoverParameters::CheckLocomotiveParametersQ(bool ReadyFlag, int Dir)
|
||||
bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
|
||||
{
|
||||
bool OK;
|
||||
int b;
|
||||
|
||||
@@ -18,6 +18,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -69,6 +70,12 @@ inline int Random()
|
||||
return rand();
|
||||
}
|
||||
|
||||
inline float random(float a, float b)
|
||||
{
|
||||
srand(time(NULL));
|
||||
return a + rand() / (float)RAND_MAX * (b - a);
|
||||
}
|
||||
|
||||
inline double BorlandTime()
|
||||
{
|
||||
std::tm epoch;
|
||||
@@ -108,7 +115,11 @@ void ComputeArc(double X0, double Y0, double Xn, double Yn, double R, double L,
|
||||
/*wylicza polozenie Xout Yout i orientacje phi punktu na elemencie dL luku*/
|
||||
void ComputeALine(double X0, double Y0, double Xn, double Yn, double L, double R, double & Xout, double & Yout);
|
||||
|
||||
|
||||
inline bool fileExist(const std::string &name)
|
||||
{
|
||||
struct stat buffer;
|
||||
return (stat(name.c_str(), &buffer) == 0);
|
||||
}
|
||||
|
||||
double Xmin; double Ymin; double Xmax; double Ymax;
|
||||
double Xaspect; double Yaspect;
|
||||
|
||||
@@ -129,7 +129,7 @@ bool TMemCell::Load(cParser *parser)
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
if (token.compare("none") != 0) // gdy ró¿ne od "none"
|
||||
asTrackName = AnsiString(token.c_str()); // sprawdzane przez IsEmpty()
|
||||
asTrackName = token; // sprawdzane przez IsEmpty()
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
if (token.compare("endmemcell") != 0)
|
||||
|
||||
@@ -13,6 +13,7 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include "Classes.h"
|
||||
#include "dumb3d.h"
|
||||
using namespace Math3D;
|
||||
using namespace std;
|
||||
|
||||
class TMemCell
|
||||
{
|
||||
@@ -25,7 +26,7 @@ class TMemCell
|
||||
bool bCommand; // czy zawiera komendê dla zatrzymanego AI
|
||||
TEvent *OnSent; // event dodawany do kolejki po wys³aniu komendy zatrzymuj¹cej sk³ad
|
||||
public:
|
||||
AnsiString
|
||||
string
|
||||
asTrackName; // McZapkie-100302 - zeby nazwe toru na ktory jest Putcommand wysylane pamietac
|
||||
TMemCell(vector3 *p);
|
||||
~TMemCell();
|
||||
|
||||
@@ -12,8 +12,8 @@ http://mozilla.org/MPL/2.0/.
|
||||
|
||||
*/
|
||||
|
||||
//#include "system.hpp"
|
||||
//#include "classes.hpp"
|
||||
#include "system.hpp"
|
||||
#include "classes.hpp"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "math.h"
|
||||
@@ -61,7 +61,7 @@ void TRealSound::Init(char *SoundName, double DistanceAttenuation, double X, dou
|
||||
{ // dla modulowanych nie może być zmiany mnożnika, bo częstotliwość w nagłówku byłą
|
||||
// ignorowana, a mogła być inna niż 22050
|
||||
fFrequency = 22050.0;
|
||||
ErrorLog("Bad sound: " + AnsiString(SoundName) +
|
||||
ErrorLog("Bad sound: " + string(SoundName) +
|
||||
", as modulated, should have 22.05kHz in header");
|
||||
}
|
||||
AM = 1.0;
|
||||
@@ -70,7 +70,7 @@ void TRealSound::Init(char *SoundName, double DistanceAttenuation, double X, dou
|
||||
else
|
||||
{ // nie ma dźwięku, to jest wysyp
|
||||
AM = 0;
|
||||
ErrorLog("Missed sound: " + AnsiString(SoundName));
|
||||
ErrorLog("Missed sound: " + string(SoundName));
|
||||
}
|
||||
if (DistanceAttenuation > 0.0)
|
||||
{
|
||||
|
||||
@@ -10,8 +10,12 @@ http://mozilla.org/MPL/2.0/.
|
||||
#ifndef RealSoundH
|
||||
#define RealSoundH
|
||||
|
||||
#include "system.hpp"
|
||||
#include "classes.hpp"
|
||||
|
||||
#include "Sound.h"
|
||||
#include "Geometry.h"
|
||||
#include <string>
|
||||
|
||||
class TRealSound
|
||||
{
|
||||
|
||||
@@ -25,9 +25,9 @@ http://mozilla.org/MPL/2.0/.
|
||||
// 101206 Ra: trapezoidalne drogi
|
||||
// 110806 Ra: odwrócone mapowanie wzdłuż - Point1 == 1.0
|
||||
|
||||
AnsiString Where(vector3 p)
|
||||
string Where(vector3 p)
|
||||
{ // zamiana współrzędnych na tekst, używana w błędach
|
||||
return AnsiString(p.x) + " " + AnsiString(p.y) + " " + AnsiString(p.z);
|
||||
return to_string(p.x) + " " + to_string(p.y) + " " + to_string(p.z);
|
||||
};
|
||||
|
||||
TSegment::TSegment(TTrack *owner)
|
||||
|
||||
@@ -58,10 +58,10 @@ TSoundContainer::TSoundContainer(LPDIRECTSOUND pDS, char *Directory, char *strFi
|
||||
{
|
||||
// SetFileUI( hDlg, TEXT("Bad wave file.") );
|
||||
return;
|
||||
ErrorLog("Missed sound: " + AnsiString(strFileName));
|
||||
ErrorLog("Missed sound: " + string(strFileName));
|
||||
}
|
||||
|
||||
strcpy(Name, AnsiString(strFileName).LowerCase().c_str());
|
||||
strcpy(Name, ToLower(strFileName).c_str());
|
||||
|
||||
// Set up the direct sound buffer, and only request the flags needed
|
||||
// since each requires some overhead and limits if the buffer can
|
||||
@@ -208,7 +208,7 @@ LPDIRECTSOUNDBUFFER TSoundsManager::GetFromName(char *Name, bool Dynamic, float
|
||||
AnsiString file;
|
||||
if (Dynamic)
|
||||
{ // próba wczytania z katalogu pojazdu
|
||||
file = Global::asCurrentDynamicPath + AnsiString(Name);
|
||||
file = AnsiString(Global::asCurrentDynamicPath.c_str()) + AnsiString(Name);
|
||||
if (FileExists(file))
|
||||
Name = file.c_str(); // nowa nazwa
|
||||
else
|
||||
@@ -259,7 +259,7 @@ LPDIRECTSOUNDBUFFER TSoundsManager::GetFromName(char *Name, bool Dynamic, float
|
||||
*fSamplingRate = Next->fSamplingRate; // czêstotliwoœæ
|
||||
return Next->GetUnique(pDS);
|
||||
}
|
||||
ErrorLog("Missed sound: " + AnsiString(Name));
|
||||
ErrorLog("Missed sound: " + string(Name));
|
||||
return (NULL);
|
||||
};
|
||||
|
||||
|
||||
106
Track.cpp
106
Track.cpp
@@ -93,7 +93,7 @@ TIsolated::TIsolated()
|
||||
TIsolated("none", NULL);
|
||||
};
|
||||
|
||||
TIsolated::TIsolated(const AnsiString &n, TIsolated *i)
|
||||
TIsolated::TIsolated(const string &n, TIsolated *i)
|
||||
{ // utworznie obwodu izolowanego
|
||||
asName = n;
|
||||
pNext = i;
|
||||
@@ -115,7 +115,7 @@ TIsolated::~TIsolated(){
|
||||
*/
|
||||
};
|
||||
|
||||
TIsolated * TIsolated::Find(const AnsiString &n)
|
||||
TIsolated * TIsolated::Find(const string &n)
|
||||
{ // znalezienie obiektu albo utworzenie nowego
|
||||
TIsolated *p = pRoot;
|
||||
while (p)
|
||||
@@ -453,18 +453,18 @@ vector3 LoadPoint(cParser *parser)
|
||||
return p;
|
||||
}
|
||||
|
||||
void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
void TTrack::Load(cParser *parser, vector3 pOrigin, std::string name)
|
||||
{ // pobranie obiektu trajektorii ruchu
|
||||
vector3 pt, vec, p1, p2, cp1, cp2, p3, p4, cp3, cp4; // dodatkowe punkty potrzebne do skrzyżowań
|
||||
double a1, a2, r1, r2, r3, r4, d1, d2, a;
|
||||
AnsiString str;
|
||||
string str;
|
||||
bool bCurve;
|
||||
int i; //,state; //Ra: teraz już nie ma początkowego stanu zwrotnicy we wpisie
|
||||
std::string token;
|
||||
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str()); // typ toru
|
||||
str = token; // typ toru
|
||||
|
||||
if (str == "normal")
|
||||
{
|
||||
@@ -509,7 +509,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
else
|
||||
eType = tt_Unknown;
|
||||
if (Global::iWriteLogEnabled & 4)
|
||||
WriteLog(str.c_str());
|
||||
WriteLog(str);
|
||||
parser->getTokens(4);
|
||||
*parser >> fTrackLength >> fTrackWidth >> fFriction >> fSoundDistance;
|
||||
// fTrackLength=Parser->GetNextSymbol().ToDouble(); //track length
|
||||
@@ -526,7 +526,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
iAction |= 0x80; // flaga wykolejania z powodu uszkodzenia
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str()); // environment
|
||||
str = token; // environment
|
||||
if (str == "flat")
|
||||
eEnvironment = e_flat;
|
||||
else if (str == "mountains" || str == "mountain")
|
||||
@@ -551,9 +551,9 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str()); // railtex
|
||||
str = token; // railtex
|
||||
TextureID1 = (str == "none" ? 0 : TTexturesManager::GetTextureID(
|
||||
szTexturePath, szSceneryPath, str.c_str(),
|
||||
szTexturePath, szSceneryPath, str,
|
||||
(iCategoryFlag & 1) ? Global::iRailProFiltering :
|
||||
Global::iBallastFiltering));
|
||||
parser->getTokens();
|
||||
@@ -562,9 +562,9 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
fTexLength = 4; // Ra: zabezpiecznie przed zawieszeniem
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str()); // sub || railtex
|
||||
str = token; // sub || railtex
|
||||
TextureID2 = (str == "none" ? 0 : TTexturesManager::GetTextureID(
|
||||
szTexturePath, szSceneryPath, str.c_str(),
|
||||
szTexturePath, szSceneryPath, str,
|
||||
(eType == tt_Normal) ? Global::iBallastFiltering :
|
||||
Global::iRailProFiltering));
|
||||
parser->getTokens(3);
|
||||
@@ -751,44 +751,44 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
}
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
str = token;
|
||||
while (str != "endtrack")
|
||||
{
|
||||
if (str == "event0")
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEvent0Name = AnsiString(token.c_str());
|
||||
asEvent0Name = token;
|
||||
}
|
||||
else if (str == "event1")
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEvent1Name = AnsiString(token.c_str());
|
||||
asEvent1Name = token;
|
||||
}
|
||||
else if (str == "event2")
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEvent2Name = AnsiString(token.c_str());
|
||||
asEvent2Name = token;
|
||||
}
|
||||
else if (str == "eventall0")
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEventall0Name = AnsiString(token.c_str());
|
||||
asEventall0Name = token;
|
||||
}
|
||||
else if (str == "eventall1")
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEventall1Name = AnsiString(token.c_str());
|
||||
asEventall1Name = token;
|
||||
}
|
||||
else if (str == "eventall2")
|
||||
{
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
asEventall2Name = AnsiString(token.c_str());
|
||||
asEventall2Name = token;
|
||||
}
|
||||
else if (str == "velocity")
|
||||
{
|
||||
@@ -803,7 +803,7 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
{ // obwód izolowany, do którego tor należy
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
pIsolated = TIsolated::Find(AnsiString(token.c_str()));
|
||||
pIsolated = TIsolated::Find(token);
|
||||
}
|
||||
else if (str == "angle1")
|
||||
{ // kąt ścięcia końca od strony 1
|
||||
@@ -849,15 +849,15 @@ void TTrack::Load(cParser *parser, vector3 pOrigin, AnsiString name)
|
||||
ErrorLog("Unknown property: \"" + str + "\" in track \"" + name + "\"");
|
||||
parser->getTokens();
|
||||
*parser >> token;
|
||||
str = AnsiString(token.c_str());
|
||||
str = token;
|
||||
}
|
||||
// alternatywny zapis nazwy odcinka izolowanego - po znaku "@" w nazwie toru
|
||||
if (!pIsolated)
|
||||
if ((i = name.Pos("@")) > 0)
|
||||
if (i < name.Length()) // nie może być puste
|
||||
if ((i = name.find("@")) != string::npos)
|
||||
if (i < name.length()) // nie może być puste
|
||||
{
|
||||
pIsolated = TIsolated::Find(name.SubString(i + 1, name.Length()));
|
||||
name = name.SubString(1, i - 1); // usunięcie z nazwy
|
||||
pIsolated = TIsolated::Find(name.substr(i + 1, name.length()));
|
||||
name = name.substr(0, i - 1); // usunięcie z nazwy
|
||||
}
|
||||
}
|
||||
|
||||
@@ -874,10 +874,10 @@ bool TTrack::AssignEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEvent
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!asEvent0Name.IsEmpty())
|
||||
if (!asEvent0Name.empty())
|
||||
{
|
||||
ErrorLog(AnsiString("Bad track: Event0 \"") + asEvent0Name +
|
||||
AnsiString("\" does not exist"));
|
||||
ErrorLog("Bad track: Event0 \"" + asEvent0Name +
|
||||
"\" does not exist");
|
||||
bError = true;
|
||||
}
|
||||
}
|
||||
@@ -885,7 +885,7 @@ bool TTrack::AssignEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEvent
|
||||
else
|
||||
{
|
||||
ErrorLog(
|
||||
AnsiString("Bad track: Event0 cannot be assigned to track, track already has one"));
|
||||
"Bad track: Event0 cannot be assigned to track, track already has one");
|
||||
bError = true;
|
||||
}
|
||||
if (!evEvent1)
|
||||
@@ -896,17 +896,17 @@ bool TTrack::AssignEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEvent
|
||||
asEvent1Name = "";
|
||||
iEvents |= 2; // sumaryczna informacja o eventach
|
||||
}
|
||||
else if (!asEvent1Name.IsEmpty())
|
||||
else if (!asEvent1Name.empty())
|
||||
{ // Ra: tylko w logu informacja
|
||||
ErrorLog(AnsiString("Bad track: Event1 \"") + asEvent1Name +
|
||||
AnsiString("\" does not exist").c_str());
|
||||
ErrorLog("Bad track: Event1 \"" + asEvent1Name +
|
||||
"\" does not exist");
|
||||
bError = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorLog(
|
||||
AnsiString("Bad track: Event1 cannot be assigned to track, track already has one"));
|
||||
"Bad track: Event1 cannot be assigned to track, track already has one");
|
||||
bError = true;
|
||||
}
|
||||
if (!evEvent2)
|
||||
@@ -917,17 +917,17 @@ bool TTrack::AssignEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEvent
|
||||
asEvent2Name = "";
|
||||
iEvents |= 4; // sumaryczna informacja o eventach
|
||||
}
|
||||
else if (!asEvent2Name.IsEmpty())
|
||||
else if (!asEvent2Name.empty())
|
||||
{ // Ra: tylko w logu informacja
|
||||
ErrorLog(AnsiString("Bad track: Event2 \"") + asEvent2Name +
|
||||
AnsiString("\" does not exist"));
|
||||
ErrorLog("Bad track: Event2 \"" + asEvent2Name +
|
||||
"\" does not exist");
|
||||
bError = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorLog(
|
||||
AnsiString("Bad track: Event2 cannot be assigned to track, track already has one"));
|
||||
"Bad track: Event2 cannot be assigned to track, track already has one");
|
||||
bError = true;
|
||||
}
|
||||
return !bError;
|
||||
@@ -946,17 +946,17 @@ bool TTrack::AssignallEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEv
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!asEvent0Name.IsEmpty())
|
||||
if (!asEvent0Name.empty())
|
||||
{
|
||||
Error(AnsiString("Eventall0 \"") + asEventall0Name +
|
||||
AnsiString("\" does not exist"));
|
||||
Error("Eventall0 \"" + asEventall0Name +
|
||||
"\" does not exist");
|
||||
bError = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Error(AnsiString("Eventall0 cannot be assigned to track, track already has one"));
|
||||
Error("Eventall0 cannot be assigned to track, track already has one");
|
||||
bError = true;
|
||||
}
|
||||
if (!evEventall1)
|
||||
@@ -969,17 +969,17 @@ bool TTrack::AssignallEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEv
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!asEvent0Name.IsEmpty())
|
||||
if (!asEvent0Name.empty())
|
||||
{ // Ra: tylko w logu informacja
|
||||
WriteLog(AnsiString("Eventall1 \"") + asEventall1Name +
|
||||
AnsiString("\" does not exist"));
|
||||
WriteLog("Eventall1 \"" + asEventall1Name +
|
||||
"\" does not exist");
|
||||
bError = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Error(AnsiString("Eventall1 cannot be assigned to track, track already has one"));
|
||||
Error("Eventall1 cannot be assigned to track, track already has one");
|
||||
bError = true;
|
||||
}
|
||||
if (!evEventall2)
|
||||
@@ -992,17 +992,17 @@ bool TTrack::AssignallEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEv
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!asEvent0Name.IsEmpty())
|
||||
if (!asEvent0Name.empty())
|
||||
{ // Ra: tylko w logu informacja
|
||||
WriteLog(AnsiString("Eventall2 \"") + asEventall2Name +
|
||||
AnsiString("\" does not exist"));
|
||||
WriteLog("Eventall2 \"" + asEventall2Name +
|
||||
"\" does not exist");
|
||||
bError = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Error(AnsiString("Eventall2 cannot be assigned to track, track already has one"));
|
||||
Error("Eventall2 cannot be assigned to track, track already has one");
|
||||
bError = true;
|
||||
}
|
||||
return !bError;
|
||||
@@ -1021,7 +1021,7 @@ bool TTrack::AssignForcedEvents(TEvent *NewEventPlus, TEvent *NewEventMinus)
|
||||
return false;
|
||||
};
|
||||
|
||||
AnsiString TTrack::IsolatedName()
|
||||
string TTrack::IsolatedName()
|
||||
{ // podaje nazwę odcinka izolowanego, jesli nie ma on jeszcze przypisanych zdarzeń
|
||||
if (pIsolated)
|
||||
if (!pIsolated->evBusy && !pIsolated->evFree)
|
||||
@@ -3136,13 +3136,13 @@ void TTrack::ConnectionsLog()
|
||||
for (i = 0; i < 2; ++i)
|
||||
{
|
||||
if (SwitchExtension->pPrevs[i])
|
||||
WriteLog("Point " + AnsiString(i + i + 1) + " -> track " +
|
||||
WriteLog("Point " + to_string(i + i + 1) + " -> track " +
|
||||
SwitchExtension->pPrevs[i]->pMyNode->asName + ":" +
|
||||
AnsiString(int(SwitchExtension->iPrevDirection[i])));
|
||||
to_string(int(SwitchExtension->iPrevDirection[i])));
|
||||
if (SwitchExtension->pNexts[i])
|
||||
WriteLog("Point " + AnsiString(i + i + 2) + " -> track " +
|
||||
WriteLog("Point " + to_string(i + i + 2) + " -> track " +
|
||||
SwitchExtension->pNexts[i]->pMyNode->asName + ":" +
|
||||
AnsiString(int(SwitchExtension->iNextDirection[i])));
|
||||
to_string(int(SwitchExtension->iNextDirection[i])));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
22
Track.h
22
Track.h
@@ -17,6 +17,8 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include "Classes.h"
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
|
||||
class TEvent;
|
||||
|
||||
typedef enum
|
||||
@@ -107,10 +109,10 @@ class TIsolated
|
||||
TEvent *evFree; // zdarzenie wyzwalane po całkowitym zwolnieniu zajętości grupy
|
||||
TMemCell *pMemCell; // automatyczna komórka pamięci, która współpracuje z odcinkiem izolowanym
|
||||
TIsolated();
|
||||
TIsolated(const AnsiString &n, TIsolated *i);
|
||||
TIsolated(const string &n, TIsolated *i);
|
||||
~TIsolated();
|
||||
static TIsolated * Find(
|
||||
const AnsiString &n); // znalezienie obiektu albo utworzenie nowego
|
||||
const string &n); // znalezienie obiektu albo utworzenie nowego
|
||||
void Modify(int i, TDynamicObject *o); // dodanie lub odjęcie osi
|
||||
bool Busy()
|
||||
{
|
||||
@@ -158,12 +160,12 @@ class TTrack : public Resource
|
||||
TEvent *evEvent0; // McZapkie-280503: wyzwalany tylko gdy headdriver
|
||||
TEvent *evEvent1;
|
||||
TEvent *evEvent2;
|
||||
AnsiString asEventall0Name; // nazwy eventów
|
||||
AnsiString asEventall1Name;
|
||||
AnsiString asEventall2Name;
|
||||
AnsiString asEvent0Name;
|
||||
AnsiString asEvent1Name;
|
||||
AnsiString asEvent2Name;
|
||||
string asEventall0Name; // nazwy eventów
|
||||
string asEventall1Name;
|
||||
string asEventall2Name;
|
||||
string asEvent0Name;
|
||||
string asEvent1Name;
|
||||
string asEvent2Name;
|
||||
int iNextDirection; // 0:Point1, 1:Point2, 3:do odchylonego na zwrotnicy
|
||||
int iPrevDirection;
|
||||
TTrackType eType;
|
||||
@@ -228,7 +230,7 @@ class TTrack : public Resource
|
||||
{
|
||||
return (SwitchExtension ? SwitchExtension->CurrentIndex : -1);
|
||||
};
|
||||
void Load(cParser *parser, vector3 pOrigin, AnsiString name);
|
||||
void Load(cParser *parser, vector3 pOrigin, std::string name);
|
||||
bool AssignEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEvent2);
|
||||
bool AssignallEvents(TEvent *NewEvent0, TEvent *NewEvent1, TEvent *NewEvent2);
|
||||
bool AssignForcedEvents(TEvent *NewEventPlus, TEvent *NewEventMinus);
|
||||
@@ -266,7 +268,7 @@ class TTrack : public Resource
|
||||
if (pIsolated)
|
||||
pIsolated->Modify(i, o);
|
||||
}; // dodanie lub odjęcie osi
|
||||
AnsiString IsolatedName();
|
||||
string IsolatedName();
|
||||
bool IsolatedEventsAssign(TEvent *busy, TEvent *free);
|
||||
double WidthTotal();
|
||||
GLuint TextureGet(int i)
|
||||
|
||||
@@ -13,8 +13,10 @@ http://mozilla.org/MPL/2.0/.
|
||||
#include "opengl/glew.h"
|
||||
#include "dumb3d.h"
|
||||
#include "VBO.h"
|
||||
#include <string>
|
||||
|
||||
using namespace Math3D;
|
||||
using namespace std;
|
||||
|
||||
class TTractionPowerSource;
|
||||
|
||||
@@ -50,10 +52,10 @@ class TTraction
|
||||
DWORD DamageFlag; // 1: zasniedziale, 128: zerwana
|
||||
int Wires;
|
||||
float WireOffset;
|
||||
AnsiString asPowerSupplyName; // McZapkie: nazwa podstacji trakcyjnej
|
||||
string asPowerSupplyName; // McZapkie: nazwa podstacji trakcyjnej
|
||||
TTractionPowerSource *
|
||||
psSection; // zasilacz (opcjonalnie mo¿e to byæ pulpit steruj¹cy EL2 w hali!)
|
||||
AnsiString asParallel; // nazwa przês³a, z którym mo¿e byæ bie¿nia wspólna
|
||||
string asParallel; // nazwa przês³a, z którym mo¿e byæ bie¿nia wspólna
|
||||
TTraction *hvParallel; // jednokierunkowa i zapêtlona lista przêse³ ewentualnej bie¿ni wspólnej
|
||||
float fResistance[2]; // rezystancja zastêpcza do punktu zasilania (0: przês³o zasilane, <0: do
|
||||
// policzenia)
|
||||
|
||||
@@ -2802,7 +2802,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
|
||||
if (Global::iMultiplayer)
|
||||
{ // WriteLog("Komunikat: "+AnsiString(pRozkaz->Name1));
|
||||
TEvent *e = Ground.FindEvent(
|
||||
AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])));
|
||||
string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])));
|
||||
if (e)
|
||||
if ((e->Type == tp_Multiple) || (e->Type == tp_Lights) ||
|
||||
bool(e->evJoined)) // tylko jawne albo niejawne Multiple
|
||||
|
||||
Reference in New Issue
Block a user