From 167b1e3a8d5e5329ad214277b8ff253a5c150aaf Mon Sep 17 00:00:00 2001 From: firleju Date: Fri, 21 Oct 2016 06:56:46 +0200 Subject: [PATCH] =?UTF-8?q?Zmiana=20AnsiString=20na=20std::string.=20Zako?= =?UTF-8?q?=C5=84czenie=20sprawy=20przypadkowo=20skasowanego=20mover.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Driver.cpp | 28 +- Driver.h | 18 +- EU07.cpp | 4 +- Event.h | 2 +- Globals.cpp | 108 ++++- Globals.h | 43 +- Ground.cpp | 53 ++- Ground.h | 22 +- Logs.cpp | 5 + Logs.h | 1 + McZapkie/MOVER.h | 1059 ++++++++++++++++++++++++++++++++++++++++++++ McZapkie/mctools.h | 14 + Track.h | 2 +- Train.cpp | 4 +- Train.h | 5 +- World.cpp | 394 ++++++++-------- World.h | 8 +- usefull.h | 2 + 18 files changed, 1466 insertions(+), 306 deletions(-) diff --git a/Driver.cpp b/Driver.cpp index b0453e16..06e7b2d8 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -284,7 +284,7 @@ bool TSpeedPos::Update(vector3 *p, vector3 *dir, double &len) return false; }; -AnsiString TSpeedPos::GetName() +std::string TSpeedPos::GetName() { if (iFlags & spTrack) // je�li tor return trTrack->NameGet(); @@ -292,12 +292,12 @@ AnsiString TSpeedPos::GetName() return evEvent->asName; } -AnsiString TSpeedPos::TableText() +std::string TSpeedPos::TableText() { // pozycja tabelki pr�dko�ci if (iFlags & spEnabled) { // o ile pozycja istotna - return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) + - ", Vel=" + AnsiString(fVelNext) + ", Name=" + GetName(); + return "Flags=#" + to_hex_str(iFlags, 8) + ", Dist=" + to_string(fDist, 1, 7) + + ", Vel=" + to_string(fVelNext) + ", Name=" + GetName(); //if (iFlags & spTrack) // je�li tor // return "Flags=#" + IntToHex(iFlags, 8) + ", Dist=" + FloatToStrF(fDist, ffFixed, 7, 1) + // ", Vel=" + AnsiString(fVelNext) + ", Track=" + trTrack->NameGet(); @@ -1603,7 +1603,7 @@ TController::~TController() CloseLog(); }; -AnsiString TController::Order2Str(TOrders Order) +std::string TController::Order2Str(TOrders Order) { // zamiana kodu rozkazu na opis if (Order & Change_direction) return "Change_direction"; // mo�e by� na�o�ona na inn� i wtedy ma priorytet @@ -1638,9 +1638,9 @@ AnsiString TController::Order2Str(TOrders Order) return "Undefined!"; } -AnsiString TController::OrderCurrent() +std::string TController::OrderCurrent() { // pobranie aktualnego rozkazu celem wy�wietlenia - return AnsiString(OrderPos) + ". " + Order2Str(OrderList[OrderPos]); + return to_string(OrderPos) + ". " + Order2Str(OrderList[OrderPos]); }; void TController::OrdersClear() @@ -2889,8 +2889,8 @@ void TController::RecognizeCommand() c->Command = ""; // usuni�cie obs�u�onej komendy } -void TController::PutCommand(AnsiString NewCommand, double NewValue1, double NewValue2, - const TLocation &NewLocation, TStopReason reason) +void TController::PutCommand(std::string NewCommand, double NewValue1, double NewValue2, + const TLocation &NewLocation, TStopReason reason = stopComm) { // wys�anie komendy przez event PutValues, jak pojazd ma obsad�, to wysy�a tutaj, a nie do pojazdu // bezpo�rednio vector3 sl; @@ -2901,8 +2901,8 @@ void TController::PutCommand(AnsiString NewCommand, double NewValue1, double New mvOccupied->PutCommand(NewCommand, NewValue1, NewValue2, NewLocation); } -bool TController::PutCommand(AnsiString NewCommand, double NewValue1, double NewValue2, - const vector3 *NewLocation, TStopReason reason) +bool TController::PutCommand(std::string NewCommand, double NewValue1, double NewValue2, + const vector3 *NewLocation, TStopReason reason = stopComm) { // analiza komendy if (NewCommand == "CabSignal") { // SHP wyzwalane jest przez cz�on z obsad�, ale obs�ugiwane przez silnikowy @@ -5425,7 +5425,7 @@ void TController::ControllingSet() mvControlling = pVehicle->ControlledFind()->MoverParameters; // poszukiwanie cz�onu sterowanego }; -AnsiString TController::TableText(int i) +std::string TController::TableText(int i) { // pozycja tabelki pr�dko�ci i = (iFirst + i) % iSpeedTableSize; // numer pozycji if (i != iLast) // w (iLast) znajduje si� kolejny tor do przeskanowania, ale nie jest ona @@ -5475,7 +5475,7 @@ void TController::RouteSwitch(int d) } } }; -AnsiString TController::OwnerName() +std::string TController::OwnerName() { - return pVehicle ? pVehicle->MoverParameters->Name : AnsiString("none"); + return pVehicle ? pVehicle->MoverParameters->Name : ("none"); }; diff --git a/Driver.h b/Driver.h index c8001a05..09f42492 100644 --- a/Driver.h +++ b/Driver.h @@ -146,8 +146,8 @@ class TSpeedPos bool Update(vector3 *p, vector3 *dir, double &len); bool Set(TEvent *e, double d, TOrders order = Wait_for_orders); void Set(TTrack *t, double d, int f); - AnsiString TableText(); - AnsiString GetName(); + std::string TableText(); + std::string GetName(); bool IsProperSemaphor(TOrders order = Wait_for_orders); }; @@ -315,9 +315,9 @@ class TController { return TrainParams; }; - void PutCommand(AnsiString NewCommand, double NewValue1, double NewValue2, - const _mover::TLocation &NewLocation, TStopReason reason = stopComm); - bool PutCommand(AnsiString NewCommand, double NewValue1, double NewValue2, + void PutCommand(std::string NewCommand, double NewValue1, double NewValue2, + const TLocation &NewLocation, TStopReason reason = stopComm); + bool PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const vector3 *NewLocation, TStopReason reason = stopComm); bool UpdateSituation(double dt); // uruchamiac przynajmniej raz na sekundê // procedury dotyczace rozkazow dla maszynisty @@ -346,11 +346,11 @@ class TController TController(bool AI, TDynamicObject *NewControll, bool InitPsyche, bool primary = true // czy ma aktywnie prowadziæ? ); - AnsiString OrderCurrent(); + std::string OrderCurrent(); void WaitingSet(double Seconds); private: - AnsiString Order2Str(TOrders Order); + std::string Order2Str(TOrders Order); void DirectionForward(bool forward); int OrderDirectionChange(int newdir, TMoverParameters *Vehicle); void Lights(int head, int rear); @@ -397,10 +397,10 @@ class TController }; void MoveTo(TDynamicObject *to); void DirectionInitial(); - AnsiString TableText(int i); + std::string TableText(int i); int CrossRoute(TTrack *tr); void RouteSwitch(int d); - AnsiString OwnerName(); + std::string OwnerName(); }; #endif diff --git a/EU07.cpp b/EU07.cpp index 02641b59..5f5f9447 100644 --- a/EU07.cpp +++ b/EU07.cpp @@ -662,7 +662,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance else if (str == AnsiString("-v")) { // nazwa wybranego pojazdu str = Parser->GetNextSymbol().LowerCase(); - Global::asHumanCtrlVehicle = str; + Global::asHumanCtrlVehicle = str.c_str(); } else if (str == AnsiString("-modifytga")) { // wykonanie modyfikacji wszystkich plików TGA @@ -695,7 +695,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // instance if (Bpp != 32) Bpp = 16; // create our OpenGL window - if (!CreateGLWindow(Global::asHumanCtrlVehicle.c_str(), WindowWidth, WindowHeight, Bpp, + if (!CreateGLWindow(const_cast(Global::asHumanCtrlVehicle.c_str()), WindowWidth, WindowHeight, Bpp, fullscreen)) return 0; // quit if window was not created SetForegroundWindow(hWnd); diff --git a/Event.h b/Event.h index d04fcc49..fbf7ca2b 100644 --- a/Event.h +++ b/Event.h @@ -84,7 +84,7 @@ class TEvent // zmienne: ev* void Conditions(cParser *parser, AnsiString s); public: - AnsiString asName; + std::string asName; bool bEnabled; // false gdy ma nie byæ dodawany do kolejki (skanowanie sygna³ów) int iQueued; // ile razy dodany do kolejki // bool bIsHistory; diff --git a/Globals.cpp b/Globals.cpp index 62b8e0f2..46d6bc05 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -24,6 +24,8 @@ http://mozilla.org/MPL/2.0/. #include //do odczytu daty #include "World.h" #include +#include +#include // namespace Global { // parametry do u¿ytku wewnêtrznego @@ -34,23 +36,23 @@ TGround *Global::pGround = NULL; // char Global::CreatorName3[20]="2004-2005 Adam Bugiel "; // char Global::CreatorName4[30]="2004 Arkadiusz Œlusarczyk "; // char Global::CreatorName5[30]="2003-2009 £ukasz Kirchner "; -AnsiString Global::asCurrentSceneryPath = "scenery/"; -AnsiString Global::asCurrentTexturePath = AnsiString(szTexturePath); -AnsiString Global::asCurrentDynamicPath = ""; +std::string Global::asCurrentSceneryPath = "scenery/"; +std::string Global::asCurrentTexturePath = std::string(szTexturePath); +std::string Global::asCurrentDynamicPath = ""; int Global::iSlowMotion = 0; // info o malym FPS: 0-OK, 1-wy³¹czyæ multisampling, 3-promieñ 1.5km, 7-1km TDynamicObject *Global::changeDynObj = NULL; // info o zmianie pojazdu bool Global::detonatoryOK; // info o nowych detonatorach double Global::ABuDebug = 0; -AnsiString Global::asSky = "1"; +std::string Global::asSky = "1"; double Global::fOpenGL = 0.0; // wersja OpenGL - do sprawdzania obecnoœci rozszerzeñ bool Global::bOpenGL_1_5 = false; // czy s¹ dostêpne funkcje OpenGL 1.5 double Global::fLuminance = 1.0; // jasnoœæ œwiat³a do automatycznego zapalania int Global::iReCompile = 0; // zwiêkszany, gdy trzeba odœwie¿yæ siatki HWND Global::hWnd = NULL; // uchwyt okna int Global::iCameraLast = -1; -AnsiString Global::asRelease = "16.0.1172.481"; -AnsiString Global::asVersion = +std::string Global::asRelease = "16.0.1172.481"; +std::string Global::asVersion = "Compilation 2016-08-24, release " + Global::asRelease + "."; // tutaj, bo wysy³any int Global::iViewMode = 0; // co aktualnie widaæ: 0-kabina, 1-latanie, 2-sprzêgi, 3-dokumenty int Global::iTextMode = 0; // tryb pracy wyœwietlacza tekstowego @@ -74,7 +76,7 @@ int Global::iSegmentsRendered = 90; // ilo TCamera *Global::pCamera = NULL; // parametry kamery TDynamicObject *Global::pUserDynamic = NULL; // pojazd u¿ytkownika, renderowany bez trzêsienia bool Global::bSmudge = false; // czy wyœwietlaæ smugê, a pojazd u¿ytkownika na koñcu -AnsiString Global::asTranscript[5]; // napisy na ekranie (widoczne) +std::string Global::asTranscript[5]; // napisy na ekranie (widoczne) TTranscripts Global::tranTexts; // obiekt obs³uguj¹cy stenogramy dŸwiêków na ekranie // parametry scenerii @@ -115,13 +117,13 @@ bool Global::bInactivePause = true; // automatyczna pauza, gdy okno nieaktywne float Global::fMouseXScale = 1.5; float Global::fMouseYScale = 0.2; char Global::szSceneryFile[256] = "td.scn"; -AnsiString Global::asHumanCtrlVehicle = "EU07-424"; +std::string Global::asHumanCtrlVehicle = "EU07-424"; int Global::iMultiplayer = 0; // blokada dzia³ania niektórych funkcji na rzecz komunikacji double Global::fMoveLight = -1; // ruchome œwiat³o 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] -AnsiString Global::asLang = "pl"; // domyœlny jêzyk - http://tools.ietf.org/html/bcp47 +std::string 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; @@ -143,7 +145,7 @@ int Global::iSlowMotionMask = -1; // maska wy int Global::iModifyTGA = 7; // czy korygowaæ pliki TGA dla szybszego wczytywania // bool Global::bTerrainCompact=true; //czy zapisaæ teren w pliku TAnimModel *Global::pTerrainCompact = NULL; // do zapisania terenu w pliku -AnsiString Global::asTerrainModel = ""; // nazwa obiektu terenu do zapisania w pliku +std::string Global::asTerrainModel = ""; // nazwa obiektu terenu do zapisania w pliku double Global::fFpsAverage = 20.0; // oczekiwana wartosæ FPS double Global::fFpsDeviation = 5.0; // odchylenie standardowe FPS double Global::fFpsMin = 0.0; // dolna granica FPS, przy której promieñ scenerii bêdzie zmniejszany @@ -205,7 +207,7 @@ AnsiString Global::GetNextSymbol() return ""; }; -void Global::LoadIniFile(AnsiString asFileName) +void Global::LoadIniFile(std::string asFileName) { int i; for (i = 0; i < 10; ++i) @@ -217,7 +219,7 @@ void Global::LoadIniFile(AnsiString asFileName) fs = new TFileStream(asFileName, fmOpenRead | fmShareCompat); if (!fs) return; - AnsiString str = ""; + std::string str = ""; int size = fs->Size; str.SetLength(size); fs->Read(str.c_str(), size); @@ -342,7 +344,7 @@ void Global::ConfigParse(TQueryParserComp *qp, cParser *cp) str = GetNextSymbol().LowerCase(); // rozszerzenie if (str == "tga") szDefaultExt = szTexturesTGA; // domyœlnie od TGA - // szDefaultExt=std::string(Parser->GetNextSymbol().LowerCase().c_str()); + // szDefaultExt=AnsiString(Parser->GetNextSymbol().LowerCase().c_str()); } else if (str == AnsiString("newaircouplers")) bnewAirCouplers = (GetNextSymbol().LowerCase() == AnsiString("yes")); @@ -573,7 +575,7 @@ void Global::ConfigParse(TQueryParserComp *qp, cParser *cp) } } -void Global::InitKeys(AnsiString asFileName) +void Global::InitKeys(std::string asFileName) { // if (FileExists(asFileName)) // { @@ -798,7 +800,7 @@ void TTranscripts::AddLine(char *txt, float show, float hide, bool it) aLines[j].fShow = show; // wyœwietlaæ od aLines[j].fHide = hide; // wyœwietlaæ do aLines[j].bItalic = it; - aLines[j].asText = AnsiString(txt); // bez sensu, wystarczy³by wskaŸnik + aLines[j].asText = std::string(txt); // bez sensu, wystarczy³by wskaŸnik if ((k = aLines[j].asText.Pos("|")) > 0) { // jak jest podzia³ linijki na wiersze aLines[j].asText = aLines[j].asText.SubString(1, k - 1); @@ -890,9 +892,9 @@ char bezogonkowo[128] = "E?,?\"_++?%Sstzz" "RAAAALCCCEEEEIIDDNNOOOOxRUUUUYTB" "raaaalccceeeeiiddnnoooo-ruuuuyt?"; -AnsiString Global::Bezogonkow(AnsiString str, bool _) +std::string Global::Bezogonkow(std::string str, bool _) { // wyciêcie liter z ogonkami, bo OpenGL nie umie wyœwietliæ - for (int i = 1; i <= str.Length(); ++i) + for (int i = 1; i <= str.length(); ++i) if (str[i] & 0x80) str[i] = bezogonkowo[str[i] & 0x7F]; else if (str[i] < ' ') // znaki steruj¹ce nie s¹ obs³ugiwane @@ -919,11 +921,81 @@ double Global::CutValueToRange(double min, double value, double max) return value; }; -std::string Global::to_string(int _Val) +std::string to_string(int _Val) { std::ostringstream o; o << _Val; return o.str(); }; +std::string to_string(unsigned int _Val) +{ + std::ostringstream o; + o << _Val; + return o.str(); +}; + +std::string to_string(double _Val) +{ + std::ostringstream o; + o << _Val; + return o.str(); +}; + +std::string to_string(int _Val, int precision) +{ + std::ostringstream o; + o << std::fixed << std::setprecision(precision); + o << _Val; + return o.str(); +}; + +std::string to_string(double _Val, int precision) +{ + std::ostringstream o; + o << std::fixed << std::setprecision(precision); + o << _Val; + return o.str(); +}; + +std::string to_string(int _Val, int precision, int width) +{ + std::ostringstream o; + o.width(width); + o << std::fixed << std::setprecision(precision); + o << _Val; + return o.str(); +}; + +std::string to_string(double _Val, int precision, int width) +{ + std::ostringstream o; + o.width(width); + o << std::fixed << std::setprecision(precision); + o << _Val; + return o.str(); +}; + +std::string to_hex_str(double _Val, int precision = 0, int width = 0) +{ + std::ostringstream o; + if (width) + o.width(width); + o << std::fixed << std::hex; + if (precision) + o << std::setprecision(precision); + o << _Val; + return o.str(); +}; + +std::string ToLower(std::string text) +{ + std::transform(text.begin(), text.end(), text.begin(), ::tolower); +} + +std::string ToUpper(std::string text) +{ + std::transform(text.begin(), text.end(), text.begin(), ::toupper); +} + #pragma package(smart_init) diff --git a/Globals.h b/Globals.h index 3028d24d..fd597590 100644 --- a/Globals.h +++ b/Globals.h @@ -134,7 +134,7 @@ class TTranscript public: float fShow; // czas pokazania float fHide; // czas ukrycia/usuniêcia - AnsiString asText; // tekst gotowy do wyœwietlenia (usuniête znaczniki czasu) + std::string asText; // tekst gotowy do wyœwietlenia (usuniête znaczniki czasu) bool bItalic; // czy kursywa (dŸwiêk nieistotny dla prowadz¹cego) int iNext; // nastêpna u¿ywana linijka, ¿eby nie przestawiaæ fizycznie tabeli }; @@ -200,13 +200,13 @@ class Global static char CreatorName3[20]; static char CreatorName4[30]; static char CreatorName5[30]; - static AnsiString asCurrentSceneryPath; - static AnsiString asCurrentTexturePath; - static AnsiString asCurrentDynamicPath; + static std::string asCurrentSceneryPath; + static std::string asCurrentTexturePath; + static std::string asCurrentDynamicPath; // McZapkie-170602: zewnetrzna definicja pojazdu uzytkownika - static AnsiString asHumanCtrlVehicle; - static void LoadIniFile(AnsiString asFileName); - static void InitKeys(AnsiString asFileName); + static std::string asHumanCtrlVehicle; + static void LoadIniFile(std::string asFileName); + static void InitKeys(std::string asFileName); inline static vector3 GetCameraPosition() { return pCameraPosition; @@ -233,7 +233,7 @@ class Global static TDynamicObject *changeDynObj; static double ABuDebug; static bool detonatoryOK; - static AnsiString asSky; + static std::string asSky; static bool bnewAirCouplers; // Ra: nowe zmienne globalne static int iDefaultFiltering; // domyœlne rozmywanie tekstur TGA @@ -250,8 +250,8 @@ class Global static int iMultiplayer; // blokada dzia³ania niektórych eventów na rzecz kominikacji static HWND hWnd; // uchwyt okna static int iCameraLast; - static AnsiString asRelease; // numer - static AnsiString asVersion; // z opisem + static std::string asRelease; // numer + static std::string asVersion; // z opisem static int iViewMode; // co aktualnie widaæ: 0-kabina, 1-latanie, 2-sprzêgi, 3-dokumenty, 4-obwody static GLint iMaxTextureSize; // maksymalny rozmiar tekstury @@ -284,7 +284,7 @@ class Global static TWorld *pWorld; // wskaŸnik na œwiat do usuwania pojazdów static TAnimModel *pTerrainCompact; // obiekt terenu do ewentualnego zapisania w pliku - static AnsiString asTerrainModel; // nazwa obiektu terenu do zapisania w pliku + static std::string asTerrainModel; // nazwa obiektu terenu do zapisania w pliku static bool bRollFix; // czy wykonaæ przeliczanie przechy³ki static Queryparsercomp::TQueryParserComp *qParser; static cParser *pParser; @@ -306,9 +306,9 @@ class Global static double fBrakeStep; // krok zmiany hamulca dla klawiszy [Num3] i [Num9] static bool bJoinEvents; // czy grupowaæ eventy o tych samych nazwach static bool bSmudge; // czy wyœwietlaæ smugê, a pojazd u¿ytkownika na koñcu - static AnsiString asTranscript[5]; // napisy na ekranie (widoczne) + static std::string asTranscript[5]; // napisy na ekranie (widoczne) static TTranscripts tranTexts; // obiekt obs³uguj¹cy stenogramy dŸwiêków na ekranie - static AnsiString asLang; // domyœlny jêzyk - http://tools.ietf.org/html/bcp47 + static std::string 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 @@ -321,12 +321,23 @@ class Global static TDynamicObject * CouplerNearest(); static bool AddToQuery(TEvent *event, TDynamicObject *who); static bool DoEvents(); - static AnsiString Bezogonkow(AnsiString str, bool _ = false); + static std::string Bezogonkow(std::string str, bool _ = false); static double Min0RSpeed(double vel1, double vel2); static double CutValueToRange(double min, double value, double max); - static std::string to_string(int _Val); - }; + std::string to_string(int _Val); + std::string to_string(unsigned int _Val); + std::string to_string(int _Val, int precision); + std::string to_string(int _Val, int precision, int width); + std::string to_string(double _Val); + std::string to_string(double _Val, int precision); + std::string to_string(double _Val, int precision, int width); + std::string to_hex_str(int _Val, int precision, int width); + + + std::string ToLower(std::string text); + std::string ToUpper(std::string text); + //--------------------------------------------------------------------------- #endif diff --git a/Ground.cpp b/Ground.cpp index a21bc392..34832e00 100644 --- a/Ground.cpp +++ b/Ground.cpp @@ -1360,7 +1360,7 @@ void TGround::Free() delete sTracks; } -TGroundNode * TGround::DynamicFindAny(AnsiString asNameToFind) +TGroundNode * TGround::DynamicFindAny(std::string asNameToFind) { // wyszukanie pojazdu o podanej nazwie, szukanie po wszystkich (u¿yæ drzewa!) for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) if ((Current->asName == asNameToFind)) @@ -1368,7 +1368,7 @@ TGroundNode * TGround::DynamicFindAny(AnsiString asNameToFind) return NULL; }; -TGroundNode * TGround::DynamicFind(AnsiString asNameToFind) +TGroundNode * TGround::DynamicFind(std::string asNameToFind) { // wyszukanie pojazdu z obsad¹ o podanej nazwie (u¿yæ drzewa!) for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext) if (Current->DynamicObject->Mechanik) @@ -1386,7 +1386,7 @@ void TGround::DynamicList(bool all) WyslijString("none", 6); // informacja o koñcu listy }; -TGroundNode * TGround::FindGroundNode(AnsiString asNameToFind, TGroundNodeType iNodeType) +TGroundNode * TGround::FindGroundNode(std::string asNameToFind, TGroundNodeType iNodeType) { // wyszukiwanie obiektu o podanej nazwie i konkretnym typie if ((iNodeType == TP_TRACK) || (iNodeType == TP_MEMCELL) || (iNodeType == TP_MODEL)) { // wyszukiwanie w drzewie binarnym @@ -2362,10 +2362,10 @@ void TGround::FirstInit() WriteLog("FirstInit is done"); }; -bool TGround::Init(AnsiString asFile, HDC hDC) +bool TGround::Init(std::string asFile, HDC hDC) { // g³ówne wczytywanie scenerii - if (asFile.LowerCase().SubString(1, 7) == "scenery") - asFile.Delete(1, 8); // Ra: usuniêcie niepotrzebnych znaków - zgodnoœæ wstecz z 2003 + 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 WriteLog("Loading scenery from " + asFile); Global::pGround = this; // pTrain=NULL; @@ -2373,8 +2373,8 @@ bool TGround::Init(AnsiString asFile, HDC hDC) AnsiString str = ""; // TFileStream *fs; // int size; - std::string subpath = Global::asCurrentSceneryPath.c_str(); // "scenery/"; - cParser parser(asFile.c_str(), cParser::buffer_FILE, subpath, Global::bLoadTraction); + std::string subpath = Global::asCurrentSceneryPath; // "scenery/"; + cParser parser(asFile, cParser::buffer_FILE, subpath, Global::bLoadTraction); std::string token; /* @@ -2800,8 +2800,7 @@ bool TGround::Init(AnsiString asFile, HDC hDC) WriteLog("Scenery sky definition"); parser.getTokens(); parser >> token; - AnsiString SkyTemp; - SkyTemp = AnsiString(token.c_str()); + string SkyTemp = token; if (Global::asSky == "1") Global::asSky = SkyTemp; do @@ -4777,12 +4776,12 @@ void TGround::Navigate(String ClassName, UINT Msg, WPARAM wParam, LPARAM lParam) SendMessage(h, Msg, wParam, lParam); }; //-------------------------------- -void TGround::WyslijEvent(const AnsiString &e, const AnsiString &d) +void TGround::WyslijEvent(const std::string &e, const std::string &d) { // Ra: jeszcze do wyczyszczenia DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = 2; // 2 - event - int i = e.Length(), j = d.Length(); + int i = e.length(), j = d.length(); r.cString[0] = char(i); strcpy(r.cString + 1, e.c_str()); // zakoñczony zerem r.cString[i + 2] = char(j); // licznik po zerze koñcz¹cym @@ -4792,15 +4791,15 @@ void TGround::WyslijEvent(const AnsiString &e, const AnsiString &d) cData.cbData = 12 + i + j; // 8+dwa liczniki i dwa zera koñcz¹ce cData.lpData = &r; Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); - CommLog(AnsiString(Now()) + " " + IntToStr(r.iComm) + " " + e + " sent"); + CommLog(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + e + " sent"); }; //--------------------------------------------------------------------------- -void TGround::WyslijUszkodzenia(const AnsiString &t, char fl) +void TGround::WyslijUszkodzenia(const std::string &t, char fl) { // wys³anie informacji w postaci pojedynczego tekstu DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = 13; // numer komunikatu - int i = t.Length(); + int i = t.length(); r.cString[0] = char(fl); r.cString[1] = char(i); strcpy(r.cString + 2, t.c_str()); // z zerem koñcz¹cym @@ -4809,15 +4808,15 @@ void TGround::WyslijUszkodzenia(const AnsiString &t, char fl) cData.cbData = 11 + i; // 8+licznik i zero koñcz¹ce cData.lpData = &r; Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); - CommLog(AnsiString(Now()) + " " + IntToStr(r.iComm) + " " + t + " sent"); + CommLog(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + t + " sent"); }; //--------------------------------------------------------------------------- -void TGround::WyslijString(const AnsiString &t, int n) +void TGround::WyslijString(const std::string &t, int n) { // wys³anie informacji w postaci pojedynczego tekstu DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = n; // numer komunikatu - int i = t.Length(); + int i = t.length(); r.cString[0] = char(i); strcpy(r.cString + 1, t.c_str()); // z zerem koñcz¹cym COPYDATASTRUCT cData; @@ -4825,10 +4824,10 @@ void TGround::WyslijString(const AnsiString &t, int n) cData.cbData = 10 + i; // 8+licznik i zero koñcz¹ce cData.lpData = &r; Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); - CommLog(AnsiString(Now()) + " " + IntToStr(r.iComm) + " " + t + " sent"); + CommLog(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + t + " sent"); }; //--------------------------------------------------------------------------- -void TGround::WyslijWolny(const AnsiString &t) +void TGround::WyslijWolny(const std::string &t) { // Ra: jeszcze do wyczyszczenia WyslijString(t, 4); // tor wolny }; @@ -4839,7 +4838,7 @@ void TGround::WyslijNamiary(TGroundNode *t) DaneRozkaz r; r.iSygn = 'EU07'; r.iComm = 7; // 7 - dane pojazdu - int i = 32, j = t->asName.Length(); + int i = 32, j = t->asName.length(); r.iPar[0] = i; // iloœæ danych liczbowych r.fPar[1] = Global::fTimeAngleDeg / 360.0; // aktualny czas (1.0=doba) r.fPar[2] = t->DynamicObject->MoverParameters->Loc.X; // pozycja X @@ -4905,7 +4904,7 @@ void TGround::WyslijNamiary(TGroundNode *t) // WriteLog("Ramka gotowa"); Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); // WriteLog("Ramka poszla!"); - CommLog(AnsiString(Now()) + " " + IntToStr(r.iComm) + " " + t->asName + " sent"); + CommLog(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + t->asName + " sent"); }; // void TGround::WyslijObsadzone() @@ -4931,13 +4930,13 @@ void TGround::WyslijObsadzone() } while (i <= 30) { - strcpy(r.cString + 64 * i, AnsiString("none").c_str()); + strcpy(r.cString + 64 * i, string("none").c_str()); r.fPar[16 * i + 4] = 1; r.fPar[16 * i + 5] = 2; r.fPar[16 * i + 6] = 3; r.iPar[16 * i + 7] = 0; - strcpy(r.cString + 64 * i + 32, AnsiString("none").c_str()); - strcpy(r.cString + 64 * i + 48, AnsiString("none").c_str()); + strcpy(r.cString + 64 * i + 32, string("none").c_str()); + strcpy(r.cString + 64 * i + 48, string("none").c_str()); i++; } @@ -4947,7 +4946,7 @@ void TGround::WyslijObsadzone() cData.lpData = &r; // WriteLog("Ramka gotowa"); Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData); - CommLog(AnsiString(Now()) + " " + IntToStr(r.iComm) + " obsadzone" + " sent"); + CommLog(to_string(BorlandTime()) + " " + to_string(r.iComm) + " obsadzone" + " sent"); } //-------------------------------- @@ -5207,7 +5206,7 @@ void TGround::IsolatedBusyList() }; //--------------------------------------------------------------------------- -void TGround::IsolatedBusy(const AnsiString t) +void TGround::IsolatedBusy(const std::string t) { // wys³anie informacji o odcinku izolowanym (t) // Ra 2014-06: do wyszukania u¿yæ drzewka nazw TIsolated *Current; diff --git a/Ground.h b/Ground.h index 0502cc4a..b62a0232 100644 --- a/Ground.h +++ b/Ground.h @@ -115,7 +115,7 @@ class TGroundNode : public Resource TTextSound *tsStaticSound; // dŸwiêk przestrzenny TGroundNode *nNode; // obiekt renderuj¹cy grupowo ma tu wskaŸnik na listê obiektów }; - AnsiString asName; // nazwa (nie zawsze ma znaczenie) + std::string asName; // nazwa (nie zawsze ma znaczenie) union { int iNumVerts; // dla trójk¹tów @@ -156,7 +156,7 @@ class TGroundNode : public Resource void MoveMe(vector3 pPosition); // przesuwanie (nie dzia³a) // bool Disable(); - inline TGroundNode * Find(const AnsiString &asNameToFind, TGroundNodeType iNodeType) + inline TGroundNode * Find(const std::string &asNameToFind, TGroundNodeType iNodeType) { // wyszukiwanie czo³gowe z typem if ((iNodeType == iType) && (asNameToFind == asName)) return this; @@ -302,7 +302,7 @@ class TGround TGround(); ~TGround(); void Free(); - bool Init(AnsiString asFile, HDC hDC); + bool Init(std::string asFile, HDC hDC); void FirstInit(); void InitTracks(); void InitTraction(); @@ -326,7 +326,7 @@ class TGround }; // bool Include(TQueryParserComp *Parser); // TGroundNode* GetVisible(AnsiString asName); - TGroundNode * GetNode(AnsiString asName); + TGroundNode * GetNode(std::string asName); bool AddDynamic(TGroundNode *Node); void MoveGroundNode(vector3 pPosition); void UpdatePhys(double dt, int iter); // aktualizacja fizyki sta³ym krokiem @@ -355,10 +355,10 @@ class TGround return NULL; } */ - TGroundNode * DynamicFindAny(AnsiString asNameToFind); - TGroundNode * DynamicFind(AnsiString asNameToFind); + TGroundNode * DynamicFindAny(std::string asNameToFind); + TGroundNode * DynamicFind(std::string asNameToFind); void DynamicList(bool all = false); - TGroundNode * FindGroundNode(AnsiString asNameToFind, TGroundNodeType iNodeType); + TGroundNode * FindGroundNode(std::string asNameToFind, TGroundNodeType iNodeType); TGroundRect * GetRect(double x, double z) { return &Rects[GetColFromX(x) / iNumSubRects][GetRowFromZ(z) / iNumSubRects]; @@ -394,11 +394,11 @@ class TGround public: void WyslijEvent(const AnsiString &e, const AnsiString &d); int iRendered; // iloœæ renderowanych sektorów, pobierana przy pokazywniu FPS - void WyslijString(const AnsiString &t, int n); - void WyslijWolny(const AnsiString &t); + void WyslijString(const std::string &t, int n); + void WyslijWolny(const std::string &t); void WyslijNamiary(TGroundNode *t); void WyslijParam(int nr, int fl); - void WyslijUszkodzenia(const AnsiString &t, char fl); + void WyslijUszkodzenia(const std::string &t, char fl); void WyslijPojazdy(int nr); // -> skladanie wielu pojazdow void WyslijObsadzone(); // -> skladanie wielu pojazdow void RadioStop(vector3 pPosition); @@ -411,7 +411,7 @@ class TGround void TerrainWrite(); void TrackBusyList(); void IsolatedBusyList(); - void IsolatedBusy(const AnsiString t); + void IsolatedBusy(const std::string t); void Silence(vector3 gdzie); }; //--------------------------------------------------------------------------- diff --git a/Logs.cpp b/Logs.cpp index 9ac225a0..7ba7a8b5 100644 --- a/Logs.cpp +++ b/Logs.cpp @@ -127,6 +127,11 @@ void CommLog(const char *str) }*/ }; +void CommLog(const std::string &str) +{ // Ra: wersja z AnsiString jest zamienna z Error() + WriteLog(str); +}; + void CommLog(const AnsiString &str) { // Ra: wersja z AnsiString jest zamienna z Error() CommLog(str.c_str()); diff --git a/Logs.h b/Logs.h index 907e4176..b0412e25 100644 --- a/Logs.h +++ b/Logs.h @@ -21,6 +21,7 @@ void ErrorLog(const AnsiString &asMessage); void WriteLog(const AnsiString &str, bool newline = true); void WriteLog(const std::string &str, bool newline = true); void CommLog(const char *str); +void CommLog(const std::string); void CommLog(const AnsiString &str); //--------------------------------------------------------------------------- #endif diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index e69de29b..e874ebd0 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -0,0 +1,1059 @@ +/* +This Source Code Form is subject to the +terms of the Mozilla Public License, v. +2.0. If a copy of the MPL was not +distributed with this file, You can +obtain one at +http://mozilla.org/MPL/2.0/. +*/ + +#ifndef MoverH +#define MoverH +//--------------------------------------------------------------------------- +//#include "Mover.hpp" //Q: 20160805 - odlaczenie pliku fizyki .pas od kompilacji +#include "Oerlikon_ESt.h" +#include "hamulce.h" +#include + + +/* +MaSzyna EU07 locomotive simulator +Copyright (C) 2001-2004 Maciej Czapkiewicz and others + +*/ + + +/* +(C) McZapkie v.2004.02 +Co brakuje: +6. brak pantografow itp 'Nie do konca, juz czesc zrobiona - Winger +7. brak efektu grzania oporow rozruchowych, silnika, osi +9. ulepszyc sprzeg sztywny oraz automatyczny +10. klopoty z EN57 +... +n. Inne lokomotywy oprocz elektrowozu pradu stalego +*/ +/* +Zrobione: +1. model szeregowego silnika elektrycznego sterowanego reostatem +2. fizyka ruchu - sily oporu, nachylenia, przyspieszenia styczne i normalne, +przyczepnosc/poslizg przy hamowaniu i rozruchu +3. docisk klockow hamulcowych -hamulec reczny oraz pomocniczy hamulec pneumatyczny +4. ubytki cisnienia wskutek hamowania, kompresor - ladowanie zbiornika +5. niektore uszkodzenia i awarie - logika rozmyta +a) silnik elektryczny - za duzy prad, napiecie, obroty +b) sprzegi - zerwanie gdy zbyt duze sily +6. flagi niektorych dzwiekow +7. hamulec zasadniczy - elektropneumatyczny (impulsowanie), pneumatyczny - zmiany cisnienia +zwiekszenie nacisku przy duzych predkosciach w hamulcach Oerlikona +8. sprzegi - sila, tlumiennosc +9. lok. el. - wylacznik glowny, odlacznik uszkodzonych silnikow +10. parametry trakcji +11. opoznienia w zalaczaniu stycznikow +12. trakcja wielokrotna +13. informacja na temat zrodla mocy dla silnikow trakcyjnych, ogrzewania, oswietlenia +14. dumb - uproszczony model lokomotywy (tylko dla AI) +15. ladunki - ilosc, typ, szybkosc na- i rozladunku, funkcje przetestowac! +16. ulepszony model fizyczny silnika elektrycznego (hamowanie silnikiem, ujemne napiecia) +17. poprawione hamulce - parametry cylindrow itp +18. ulepszone hamulce - napelnianie uderzeniowe, stopnie hamowania +19. poprawione hamulce - wyszczegolnenie cisnienia dla stopni hamowania +20. poprawione hamulce elektropneumatyczne +21. poprawione hamowanie przeciwposlizgowe i odluzniacz +22. dodany model mechanicznego napedu recznego (drezyna) +23. poprawiona szybkosc hamowania pomocniczego i przeciwposlizgowego, odlaczanie silnikow, odlaczanie bocznikow +24. wprowadzone systemy zabezpieczenia: SHP, Czuwak, sygnalizacja kabinowa (nie dzialaja w DebugMode). +25. poprawiona predkosc propagacji fali cisnienia (normalizacja przez kwadrat dlugosci) //to jest zdeka liniowe +26. uwzgledniona masa ladunku, przesuniecie w/m toru ruchu +27. lampy/sygnaly przednie/tylne +28. wprowadzona pozycja odciecia hamulca (yB: tja, ale oerlikona....) +29. rozne poprawki: slizganie, wykolejanie itp +30. model silnika spalinowego z przekladnia mechaniczna +31. otwieranie drzwi, sprezarka, przetwornica +32. wylaczanie obliczen dla nieruchomych wagonow +33. Zbudowany model rozdzielacza powietrza roznych systemow +34. Poprawiona pozycja napelniania uderzeniowego i hamulec EP +35. Dodane baterie akumulatorow (KURS90) +36. Hamowanie elektrodynamiczne w ET42 i poprawione w EP09 +37. jednokierunkowosc walu kulakowego w EZT (nie do konca) +38. wal kulakowy w ET40 +39. poprawiona blokada nastawnika w ET40 +... +*/ + +#include "dumb3d.h" +using namespace Math3D; + +const Steel2Steel_friction = 0.15; //tarcie statyczne +const g = 9.81; //przyspieszenie ziemskie +const SandSpeed = 0.1; //ile kg/s} +const RVentSpeed = 0.4; //rozpedzanie sie wentylatora obr/s^2} +const RVentMinI = 50.0; //przy jakim pradzie sie wylaczaja} +const Pirazy2 = 6.2831853071794f; +#define PI 3.1415926535897f + +//-- var, const, procedure --------------------------------------------------- +static bool const Go = true; +static bool const Hold = false; /*dla CheckLocomotiveParameters*/ +static int const ResArraySize = 64; /*dla silnikow elektrycznych*/ +static int const MotorParametersArraySize = 10; +static int const maxcc = 4; /*max. ilosc odbierakow pradu*/ +//static int const LocalBrakePosNo = 10; /*ilosc nastaw hamulca pomocniczego*/ +//static int const MainBrakeMaxPos = 10; /*max. ilosc nastaw hamulca zasadniczego*/ +static int const ManualBrakePosNo = 20; /*ilosc nastaw hamulca recznego*/ +static int const LightsSwitchPosNo = 16; + +/*uszkodzenia toru*/ +static int const dtrack_railwear = 2; +static int const dtrack_freerail = 4; +static int const dtrack_thinrail = 8; +static int const dtrack_railbend = 16; +static int const dtrack_plants = 32; +static int const dtrack_nomove = 64; +static int const dtrack_norail = 128; + +/*uszkodzenia taboru*/ +static int const dtrain_thinwheel = 1; /*dla lokomotyw*/ +static int const dtrain_loadshift = 1; /*dla wagonow*/ +static int const dtrain_wheelwear = 2; +static int const dtrain_bearing = 4; +static int const dtrain_coupling = 8; +static int const dtrain_ventilator = 16; /*dla lokomotywy el.*/ +static int const dtrain_loaddamage = 16; /*dla wagonow*/ +static int const dtrain_engine = 32; /*dla lokomotyw*/ +static int const dtrain_loaddestroyed = 32;/*dla wagonow*/ +static int const dtrain_axle = 64; +static int const dtrain_out = 128; /*wykolejenie*/ + + /*wagi prawdopodobienstwa dla funkcji FuzzyLogic*/ +#define p_elengproblem (1.000000E-02) +#define p_elengdamage (1.000000E-01) +#define p_coupldmg (2.000000E-02) +#define p_derail (1.000000E-03) +#define p_accn (1.000000E-01) +#define p_slippdmg (1.000000E-03) + + /*typ sprzegu*/ +static int const ctrain_virtual = 0; //gdy pojazdy na tym samym torze siê widz¹ wzajemnie +static int const ctrain_coupler = 1; //sprzeg fizyczny +static int const ctrain_pneumatic = 2; //przewody hamulcowe +static int const ctrain_controll = 4; //przewody steruj¹ce (ukrotnienie) +static int const ctrain_power = 8; //przewody zasilaj¹ce (WN) +static int const ctrain_passenger = 16; //mostek przejœciowy +static int const ctrain_scndpneumatic = 32; //przewody 8 atm (¿ó³te; zasilanie powietrzem) +static int const ctrain_heating = 64; //przewody ogrzewania WN +static int const ctrain_depot = 128; //nie roz³¹czalny podczas zwyk³ych manewrów (miêdzycz³onowy), we wpisie wartoœæ ujemna + + /*typ hamulca elektrodynamicznego*/ +static int const dbrake_none = 0; +static int const dbrake_passive = 1; +static int const dbrake_switch = 2; +static int const dbrake_reversal = 4; +static int const dbrake_automatic = 8; + +/*status czuwaka/SHP*/ +//hunter-091012: rozdzielenie alarmow, dodanie testu czuwaka +static int const s_waiting = 1; //dzia³a +static int const s_aware = 2; //czuwak miga +static int const s_active = 4; //SHP œwieci +static int const s_CAalarm = 8; //buczy +static int const s_SHPalarm = 16; //buczy +static int const s_CAebrake = 32; //hamuje +static int const s_SHPebrake = 64; //hamuje +static int const s_CAtest = 128; + +/*dzwieki*/ +static int const sound_none = 0; +static int const sound_loud = 1; +static int const sound_couplerstretch = 2; +static int const sound_bufferclamp = 4; +static int const sound_bufferbump = 8; +static int const sound_relay = 16; +static int const sound_manyrelay = 32; +static int const sound_brakeacc = 64; + +static bool const PhysicActivationFlag = false; + +//szczególne typy pojazdów (inna obs³uga) dla zmiennej TrainType +//zamienione na flagi bitowe, aby szybko wybieraæ grupê (np. EZT+SZT) +static int const dt_Default = 0; +static int const dt_EZT = 1; +static int const dt_ET41 = 2; +static int const dt_ET42 = 4; +static int const dt_PseudoDiesel = 8; +static int const dt_ET22 = 0x10; //u¿ywane od Megapacka +static int const dt_SN61 = 0x20; //nie u¿ywane w warunkach, ale ustawiane z CHK +static int const dt_EP05 = 0x40; +static int const dt_ET40 = 0x80; +static int const dt_181 = 0x100; + +//sta³e dla asynchronów +static int const eimc_s_dfic = 0; +static int const eimc_s_dfmax = 1; +static int const eimc_s_p = 2; +static int const eimc_s_cfu = 3; +static int const eimc_s_cim = 4; +static int const eimc_s_icif = 5; +static int const eimc_f_Uzmax = 7; +static int const eimc_f_Uzh = 8; +static int const eimc_f_DU = 9; +static int const eimc_f_I0 = 10; +static int const eimc_f_cfu = 11; +static int const eimc_p_F0 = 13; +static int const eimc_p_a1 = 14; +static int const eimc_p_Pmax = 15; +static int const eimc_p_Fh = 16; +static int const eimc_p_Ph = 17; +static int const eimc_p_Vh0 = 18; +static int const eimc_p_Vh1 = 19; +static int const eimc_p_Imax = 20; +static int const eimc_p_abed = 21; +static int const eimc_p_eped = 22; + +//zmienne dla asynchronów +static int const eimv_FMAXMAX = 0; +static int const eimv_Fmax = 1; +static int const eimv_ks = 2; +static int const eimv_df = 3; +static int const eimv_fp = 4; +static int const eimv_U = 5; +static int const eimv_pole = 6; +static int const eimv_Ic = 7; +static int const eimv_If = 8; +static int const eimv_M = 9; +static int const eimv_Fr = 10; +static int const eimv_Ipoj = 11; +static int const eimv_Pm = 12; +static int const eimv_Pe = 13; +static int const eimv_eta = 14; +static int const eimv_fkr = 15; +static int const eimv_Uzsmax = 16; +static int const eimv_Pmax = 17; +static int const eimv_Fzad = 18; +static int const eimv_Imax = 19; +static int const eimv_Fful = 20; + +static int const bom_PS = 1; +static int const bom_PN = 2; +static int const bom_EP = 4; +static int const bom_MED = 8; + +enum TProblem // lista problemów taboru, które uniemo¿liwiaj¹ jazdê +{ // flagi bitowe + pr_Hamuje = 1, // pojazd ma za³¹czony hamulec lub zatarte osie + pr_Pantografy = 2, // pojazd wymaga napompowania pantografów + pr_Ostatni = 0x80000000 // ostatnia flaga bitowa +}; + +/*ogolne*/ +struct TLocation +{ + double X; + double Y; + double Z; /*lokacja*/ +}; +struct TRotation +{ + double Rx; + double Ry; + double Rz; /*rotacja*/ +}; +struct TDimension +{ + double W; + double L; + double H; /*wymiary*/ +}; + +struct TCommand +{ + std::string Command; /*komenda*/ + double Value1; + double Value2; /*argumenty komendy*/ + TLocation Location; +}; + +/*tory*/ +struct TTrackShape +{/*ksztalt odcinka - promien, dlugosc, nachylenie, przechylka*/ + double R; + double Len; + double dHtrack; + double dHrail; +}; + +struct TTrackParam +{/*parametry odcinka - szerokosc, tarcie statyczne, kategoria, obciazalnosc w t/os, uszkodzenia*/ + double Width; + double friction; + int CategoryFlag; + int QualityFlag; + int DamageFlag; + double Velmax; /*dla uzytku maszynisty w ai_driver*/ +}; + +struct TTractionParam +{ + double TractionVoltage; /*napiecie*/ + double TractionFreq; /*czestotliwosc*/ + double TractionMaxCurrent; /*obciazalnosc*/ + double TractionResistivity; /*rezystancja styku*/ +}; +/*powyzsze parametry zwiazane sa z torem po ktorym aktualnie pojazd jedzie*/ + +/*typy hamulcow zespolonych*/ +enum TBrakeSystem { Individual, Pneumatic, ElectroPneumatic }; +/*podtypy hamulcow zespolonych*/ +enum TBrakeSubSystem { ss_None, ss_W, ss_K, ss_KK, ss_Hik, ss_ESt, ss_KE, ss_LSt, ss_MT, ss_Dako }; +enum TBrakeValve { NoValve, W, W_Lu_VI, W_Lu_L, W_Lu_XR, K, Kg, Kp, Kss, Kkg, Kkp, Kks, Hikg1, Hikss, Hikp1, KE, SW, EStED, NESt3, ESt3, LSt, ESt4, ESt3AL2, EP1, EP2, M483, CV1_L_TR, CV1, CV1_R, Other }; +enum TBrakeHandle { NoHandle, West, FV4a, M394, M254, FVel1, FVel6, D2, Knorr, FD1, BS2, testH, St113, MHZ_P, MHZ_T, MHZ_EN57 }; +/*typy hamulcow indywidualnych*/ +enum TLocalBrake { NoBrake, ManualBrake, PneumaticBrake, HydraulicBrake }; +/*dla osob/towar: opoznienie hamowania/odhamowania*/ +typedef double TBrakeDelayTable[4]; + +struct TBrakePressure +{ + double PipePressureVal; + double BrakePressureVal; + double FlowSpeedVal; + TBrakeSystem BrakeType; +}; + +typedef TBrakePressure TBrakePressureTable[MainBrakeMaxPos]; + + +/*typy napedow*/ +enum TEngineTypes { None, Dumb, WheelsDriven, ElectricSeriesMotor, ElectricInductionMotor, DieselEngine, SteamEngine, DieselElectric }; +/*postac dostarczanej energii*/ +enum TPowerType { NoPower, BioPower, MechPower, ElectricPower, SteamPower }; +/*rodzaj paliwa*/ +enum TFuelType { Undefined, Coal, Oil }; +/*rodzaj rusztu*/ +struct TGrateType { + TFuelType FuelType; + double GrateSurface; + double FuelTransportSpeed; + double IgnitionTemperature; + double MaxTemperature; +}; +/*rodzaj kotla*/ +struct TBoilerType { + double BoilerVolume; + double BoilerHeatSurface; + double SuperHeaterSurface; + double MaxWaterVolume; double MinWaterVolume; + double MaxPressure; +}; +/*rodzaj odbieraka pradu*/ +struct TCurrentCollector { + long CollectorsNo; //musi byæ tu, bo inaczej siê kopie + double MinH; double MaxH; //zakres ruchu pantografu, nigdzie nie u¿ywany + double CSW; //szerokoœæ czêœci roboczej (styku) œlizgacza + double MinV; double MaxV; //minimalne i maksymalne akceptowane napiêcie + double OVP; //czy jest przekaznik nadnapieciowy + double InsetV; //minimalne napiêcie wymagane do za³¹czenia + double MinPress; //minimalne ciœnienie do za³¹czenia WS + double MaxPress; //maksymalne ciœnienie za reduktorem +}; +/*typy Ÿróde³ mocy*/ +enum TPowerSource { NotDefined, InternalSource, Transducer, Generator, Accumulator, CurrentCollector, PowerCable, Heater }; + + +struct _mover__1 +{ + double MaxCapacity; + TPowerSource RechargeSource; +}; + +struct _mover__2 +{ + TPowerType PowerTrans; + double SteamPressure; +}; + +struct _mover__3 +{ + TGrateType Grate; + TBoilerType Boiler; +}; + +/*parametry Ÿróde³ mocy*/ +struct TPowerParameters +{ + double MaxVoltage; + double MaxCurrent; + double IntR; + TPowerSource SourceType; + union + { + struct + { + _mover__3 RHeater; + + }; + struct + { + _mover__2 RPowerCable; + + }; + struct + { + TCurrentCollector CollectorParameters; + + }; + struct + { + _mover__1 RAccumulator; + + }; + struct + { + TEngineTypes GeneratorEngine; + + }; + struct + { + double InputVoltage; + + }; + struct + { + TPowerType PowerType; + + }; + + }; +}; + +/*dla lokomotyw elektrycznych:*/ +struct TScheme +{ + int Relay; /*numer pozycji rozruchu samoczynnego*/ + double R; /*opornik rozruchowy*/ /*dla dizla napelnienie*/ + int Bn; + int Mn; /*ilosc galezi i silnikow w galezi*/ /*dla dizla Mn: czy luz czy nie*/ + bool AutoSwitch; /*czy dana pozycja nastawniana jest recznie czy autom.*/ + int ScndAct; /*jesli ma bocznik w nastawniku, to ktory bocznik na ktorej pozycji*/ +}; +typedef TScheme TSchemeTable[ResArraySize + 1]; /*tablica rezystorow rozr.*/ +struct TDEScheme +{ + double RPM; /*obroty diesla*/ + double GenPower; /*moc maksymalna*/ + double Umax; /*napiecie maksymalne*/ + double Imax; /*prad maksymalny*/ +}; +typedef TDEScheme TDESchemeTable[33]; /*tablica rezystorow rozr.*/ +struct TShuntScheme +{ + double Umin; + double Umax; + double Pmin; + double Pmax; +}; +typedef TShuntScheme TShuntSchemeTable[33]; +struct TMPTRelay +{/*lista przekaznikow bocznikowania*/ + double Iup; + double Idown; +}; +typedef TMPTRelay TMPTRelayTable[8]; + +struct TMotorParameters +{ + double mfi; + double mIsat; + double mfi0; // aproksymacja M(I) silnika} {dla dizla mIsat=przekladnia biegu + double fi; + double Isat; + double fi0; // aproksymacja E(n)=fi*n} {dla dizla fi, mfi: predkosci przelozenia biegu <-> + bool AutoSwitch; +}; + +struct TSecuritySystem +{ + int SystemType; /*0: brak, 1: czuwak aktywny, 2: SHP/sygnalizacja kabinowa*/ + double AwareDelay; // czas powtarzania czuwaka + double AwareMinSpeed; // minimalna prêdkoœæ za³¹czenia czuwaka, normalnie 10% Vmax + double SoundSignalDelay; + double EmergencyBrakeDelay; + int Status; /*0: wylaczony, 1: wlaczony, 2: czuwak, 4: shp, 8: alarm, 16: hamowanie awaryjne*/ + double SystemTimer; + double SystemSoundCATimer; + double SystemSoundSHPTimer; + double SystemBrakeCATimer; + double SystemBrakeSHPTimer; + double SystemBrakeCATestTimer; // hunter-091012 + int VelocityAllowed; + int NextVelocityAllowed; /*predkosc pokazywana przez sygnalizacje kabinowa*/ + bool RadioStop; // czy jest RadioStop +}; + +struct TTransmision +{//liczba zebow przekladni + int NToothM; + int NToothW; + double Ratio; +}; + +enum TCouplerType { NoCoupler, Articulated, Bare, Chain, Screw, Automatic }; + + +class TMoverParameters; // wyforwardowanie klasy coby typ byl widoczny w ponizszej strukturze +struct TCoupling { + /*parametry*/ + double SpringKB; double SpringKC; double beta; /*stala sprezystosci zderzaka/sprzegu, %tlumiennosci */ + double DmaxB; double FmaxB; double DmaxC; double FmaxC; /*tolerancja scisku/rozciagania, sila rozerwania*/ + TCouplerType CouplerType; /*typ sprzegu*/ + /*zmienne*/ + int CouplingFlag; /*0 - wirtualnie, 1 - sprzegi, 2 - pneumatycznie, 4 - sterowanie, 8 - kabel mocy*/ + int AllowedFlag; //Ra: znaczenie jak wy¿ej, maska dostêpnych + bool Render; /*ABu: czy rysowac jak zaczepiony sprzeg*/ + double CoupleDist; /*ABu: optymalizacja - liczenie odleglosci raz na klatkê, bez iteracji*/ + TMoverParameters* Connected; /*co jest podlaczone*/ + int ConnectedNr; //Ra: od której strony pod³¹czony do (Connected): 0=przód, 1=ty³ + double CForce; /*sila z jaka dzialal*/ + double Dist; /*strzalka ugiecia zderzaków*/ + bool CheckCollision; /*czy sprawdzac sile czy pedy*/ +}; + +class TMoverParameters +{ // Ra: wrapper na kod pascalowy, przejmuj¹cy jego funkcje Q: 20160824 - juz nie wrapper a klasa bazowa :) +public: + + double dMoveLen; + std::string filename; + /*---opis lokomotywy, wagonu itp*/ + /*--opis serii--*/ + int CategoryFlag; /*1 - pociag, 2 - samochod, 4 - statek, 8 - samolot*/ + /*--sekcja stalych typowych parametrow*/ + std::string TypeName; /*nazwa serii/typu*/ + //TrainType: string; {typ: EZT/elektrowoz - Winger 040304} + int TrainType; /*Ra: powinno byæ szybciej ni¿ string*/ + TEngineTypes EngineType; /*typ napedu*/ + TPowerParameters EnginePowerSource; /*zrodlo mocy dla silnikow*/ + TPowerParameters SystemPowerSource; /*zrodlo mocy dla systemow sterowania/przetwornic/sprezarek*/ + TPowerParameters HeatingPowerSource; /*zrodlo mocy dla ogrzewania*/ + TPowerParameters AlterHeatPowerSource; /*alternatywne zrodlo mocy dla ogrzewania*/ + TPowerParameters LightPowerSource; /*zrodlo mocy dla oswietlenia*/ + TPowerParameters AlterLightPowerSource;/*alternatywne mocy dla oswietlenia*/ + double Vmax; double Mass; double Power; /*max. predkosc kontrukcyjna, masa wlasna, moc*/ + double Mred; /*Ra: zredukowane masy wiruj¹ce; potrzebne do obliczeñ hamowania*/ + double TotalMass; /*wyliczane przez ComputeMass*/ + double HeatingPower; double LightPower; /*moc pobierana na ogrzewanie/oswietlenie*/ + double BatteryVoltage; /*Winger - baterie w elektrykach*/ + bool Battery; /*Czy sa zalavzone baterie*/ + bool EpFuse; /*Czy sa zalavzone baterie*/ + bool Signalling; /*Czy jest zalaczona sygnalizacja hamowania ostatniego wagonu*/ + bool DoorSignalling; /*Czy jest zalaczona sygnalizacja blokady drzwi*/ + bool Radio; /*Czy jest zalaczony radiotelefon*/ + double NominalBatteryVoltage; /*Winger - baterie w elektrykach*/ + TDimension Dim; /*wymiary*/ + double Cx; /*wsp. op. aerodyn.*/ + double Floor; //poziom pod³ogi dla ³adunków + double WheelDiameter; /*srednica kol napednych*/ + double WheelDiameterL; //Ra: srednica kol tocznych przednich + double WheelDiameterT; //Ra: srednica kol tocznych tylnych + double TrackW; /*nominalna szerokosc toru [m]*/ + double AxleInertialMoment; /*moment bezwladnosci zestawu kolowego*/ + std::string AxleArangement; /*uklad osi np. Bo'Bo' albo 1'C*/ + int NPoweredAxles; /*ilosc osi napednych liczona z powyzszego*/ + int NAxles; /*ilosc wszystkich osi j.w.*/ + int BearingType; /*lozyska: 0 - slizgowe, 1 - toczne*/ + double ADist; double BDist; /*odlegosc osi oraz czopow skretu*/ + /*hamulce:*/ + int NBpA; /*ilosc el. ciernych na os: 0 1 2 lub 4*/ + int SandCapacity; /*zasobnik piasku [kg]*/ + TBrakeSystem BrakeSystem;/*rodzaj hamulca zespolonego*/ + TBrakeSubSystem BrakeSubsystem; + TBrakeValve BrakeValve; + TBrakeHandle BrakeHandle; + TBrakeHandle BrakeLocHandle; + double MBPM; /*masa najwiekszego cisnienia*/ + + TBrake *Hamulec; + TDriverHandle *Handle; + TDriverHandle *LocHandle; + TReservoir *Pipe; TReservoir *Pipe2; + + TLocalBrake LocalBrake; /*rodzaj hamulca indywidualnego*/ + TBrakePressureTable BrakePressureTable; /*wyszczegolnienie cisnien w rurze*/ + TBrakePressure BrakePressureActual; //wartoœci wa¿one dla aktualnej pozycji kranu + int ASBType; /*0: brak hamulca przeciwposlizgowego, 1: reczny, 2: automat*/ + int TurboTest; + double MaxBrakeForce; /*maksymalna sila nacisku hamulca*/ + double MaxBrakePress[5]; //pomocniczy, proz, sred, lad, pp + double P2FTrans; + double TrackBrakeForce; /*sila nacisku hamulca szynowego*/ + int BrakeMethod; /*flaga rodzaju hamulca*/ + /*max. cisnienie w cyl. ham., stala proporcjonalnosci p-K*/ + double HighPipePress; double LowPipePress; double DeltaPipePress; + /*max. i min. robocze cisnienie w przewodzie glownym oraz roznica miedzy nimi*/ + double CntrlPipePress; //ciœnienie z zbiorniku steruj¹cym + double BrakeVolume; double BrakeVVolume; double VeselVolume; + /*pojemnosc powietrza w ukladzie hamulcowym, w ukladzie glownej sprezarki [m^3] */ + int BrakeCylNo; /*ilosc cylindrow ham.*/ + double BrakeCylRadius; double BrakeCylDist; + double BrakeCylMult[3]; + int LoadFlag; + /*promien cylindra, skok cylindra, przekladnia hamulcowa*/ + double BrakeCylSpring; /*suma nacisku sprezyn powrotnych, kN*/ + double BrakeSlckAdj; /*opor nastawiacza skoku tloka, kN*/ + double BrakeRigEff; /*sprawnosc przekladni dzwigniowej*/ + double RapidMult; /*przelozenie rapidu*/ + int BrakeValveSize; + std::string BrakeValveParams; + double Spg; + double MinCompressor; double MaxCompressor; double CompressorSpeed; + /*cisnienie wlaczania, zalaczania sprezarki, wydajnosc sprezarki*/ + TBrakeDelayTable BrakeDelay; /*opoznienie hamowania/odhamowania t/o*/ + int BrakeCtrlPosNo; /*ilosc pozycji hamulca*/ + /*nastawniki:*/ + int MainCtrlPosNo; /*ilosc pozycji nastawnika*/ + int ScndCtrlPosNo; + int LightsPosNo; int LightsDefPos; + bool LightsWrap; + int Lights[2][ /*?*//*1..16*/ (16) - (1) + 1]; + bool ScndInMain; /*zaleznosc bocznika od nastawnika*/ + bool MBrake; /*Czy jest hamulec reczny*/ + double StopBrakeDecc; + TSecuritySystem SecuritySystem; + + /*-sekcja parametrow dla lokomotywy elektrycznej*/ + TSchemeTable RList; /*lista rezystorow rozruchowych i polaczen silnikow, dla dizla: napelnienia*/ + int RlistSize; + TMotorParameters MotorParam[MotorParametersArraySize + 1]; + /*rozne parametry silnika przy bocznikowaniach*/ + /*dla lokomotywy spalinowej z przekladnia mechaniczna: przelozenia biegow*/ + TTransmision Transmision; + // record {liczba zebow przekladni} + // NToothM, NToothW : byte; + // Ratio: real; {NToothW/NToothM} + // end; + double NominalVoltage; /*nominalne napiecie silnika*/ + double WindingRes; + double u; //wspolczynnik tarcia yB wywalic!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + double CircuitRes; /*rezystancje silnika i obwodu*/ + int IminLo; int IminHi; /*prady przelacznika automatycznego rozruchu, uzywane tez przez ai_driver*/ + int ImaxLo; int ImaxHi; /*maksymalny prad niskiego i wysokiego rozruchu*/ + double nmax; /*maksymalna dop. ilosc obrotow /s*/ + double InitialCtrlDelay; double CtrlDelay; /* -//- -//- miedzy kolejnymi poz.*/ + double CtrlDownDelay; /* -//- -//- przy schodzeniu z poz.*/ /*hunter-101012*/ + int FastSerialCircuit;/*0 - po kolei zamyka styczniki az do osiagniecia szeregowej, 1 - natychmiastowe wejscie na szeregowa*/ /*hunter-111012*/ + int AutoRelayType; /*0 -brak, 1 - jest, 2 - opcja*/ + bool CoupledCtrl; /*czy mainctrl i scndctrl sa sprzezone*/ + //CouplerNr: TCouplerNr; {ABu: nr sprzegu podlaczonego w drugim obiekcie} + bool IsCoupled; /*czy jest sprzezony ale jedzie z tylu*/ + int DynamicBrakeType; /*patrz dbrake_**/ + int RVentType; /*0 - brak, 1 - jest, 2 - automatycznie wlaczany*/ + double RVentnmax; /*maks. obroty wentylatorow oporow rozruchowych*/ + double RVentCutOff; /*rezystancja wylaczania wentylatorow dla RVentType=2*/ + int CompressorPower; /*0: bezp. z obwodow silnika, 1: z przetwornicy, reczne, 2: w przetwornicy, stale, 5: z silnikowego*/ + int SmallCompressorPower; /*Winger ZROBIC*/ + bool Trafo; /*pojazd wyposa¿ony w transformator*/ + + /*-sekcja parametrow dla lokomotywy spalinowej z przekladnia mechaniczna*/ + double dizel_Mmax; double dizel_nMmax; double dizel_Mnmax; double dizel_nmax; double dizel_nominalfill; + /*parametry aproksymacji silnika spalinowego*/ + double dizel_Mstand; /*moment oporow ruchu silnika dla enrot=0*/ + /* dizel_auto_min, dizel_auto_max: real; {predkosc obrotowa przelaczania automatycznej skrzyni biegow*/ + double dizel_nmax_cutoff; /*predkosc obrotowa zadzialania ogranicznika predkosci*/ + double dizel_nmin; /*najmniejsza dopuszczalna predkosc obrotowa*/ + double dizel_minVelfullengage; /*najmniejsza predkosc przy jezdzie ze sprzeglem bez poslizgu*/ + double dizel_AIM; /*moment bezwladnosci walu itp*/ + double dizel_engageDia; double dizel_engageMaxForce; double dizel_engagefriction; /*parametry sprzegla*/ + + /*- dla lokomotyw spalinowo-elektrycznych -*/ + double AnPos; // pozycja sterowania dokladnego (analogowego) + bool AnalogCtrl; // + bool AnMainCtrl; // + bool ShuntModeAllow; + bool ShuntMode; + + bool Flat; + double Vhyp; + TDESchemeTable DElist; + double Vadd; + TMPTRelayTable MPTRelay; + int RelayType; + TShuntSchemeTable SST; + double PowerCorRatio; //Wspolczynnik korekcyjny + + + /*- dla uproszczonego modelu silnika (dumb) oraz dla drezyny*/ + double Ftmax; + + /*- dla lokomotyw z silnikami indukcyjnymi -*/ + double eimc[26]; + + /*-dla wagonow*/ + long MaxLoad; /*masa w T lub ilosc w sztukach - ladownosc*/ + std::string LoadAccepted; std::string LoadQuantity; /*co moze byc zaladowane, jednostki miary*/ + double OverLoadFactor; /*ile razy moze byc przekroczona ladownosc*/ + double LoadSpeed; double UnLoadSpeed;/*szybkosc na- i rozladunku jednostki/s*/ + int DoorOpenCtrl; int DoorCloseCtrl; /*0: przez pasazera, 1: przez maszyniste, 2: samoczynne (zamykanie)*/ + double DoorStayOpen; /*jak dlugo otwarte w przypadku DoorCloseCtrl=2*/ + bool DoorClosureWarning; /*czy jest ostrzeganie przed zamknieciem*/ + double DoorOpenSpeed; double DoorCloseSpeed; /*predkosc otwierania i zamykania w j.u. */ + double DoorMaxShiftL; double DoorMaxShiftR; double DoorMaxPlugShift;/*szerokosc otwarcia lub kat*/ + int DoorOpenMethod; /*sposob otwarcia - 1: przesuwne, 2: obrotowe, 3: trójelementowe*/ + double PlatformSpeed; /*szybkosc stopnia*/ + double PlatformMaxShift; /*wysuniecie stopnia*/ + int PlatformOpenMethod; /*sposob animacji stopnia*/ + bool ScndS; /*Czy jest bocznikowanie na szeregowej*/ + + /*--sekcja zmiennych*/ + /*--opis konkretnego egzemplarza taboru*/ + TLocation Loc; //pozycja pojazdów do wyznaczenia odleg³oœci pomiêdzy sprzêgami + TRotation Rot; + std::string Name; /*nazwa wlasna*/ + TCoupling Couplers[2]; //urzadzenia zderzno-sprzegowe, polaczenia miedzy wagonami + double HVCouplers[2][2]; //przewod WN + int ScanCounter; /*pomocnicze do skanowania sprzegow*/ + bool EventFlag; /*!o true jesli cos nietypowego sie wydarzy*/ + int SoundFlag; /*!o patrz stale sound_ */ + double DistCounter; /*! licznik kilometrow */ + double V; //predkosc w [m/s] wzglêdem sprzêgów (dodania gdy jedzie w stronê 0) + double Vel; //modu³ prêdkoœci w [km/h], u¿ywany przez AI + double AccS; //efektywne przyspieszenie styczne w [m/s^2] (wszystkie si³y) + double AccN; //przyspieszenie normalne w [m/s^2] + double AccV; + double nrot; + /*! rotacja kol [obr/s]*/ + double EnginePower; /*! chwilowa moc silnikow*/ + double dL; double Fb; double Ff; /*przesuniecie, sila hamowania i tarcia*/ + double FTrain; double FStand; /*! sila pociagowa i oporow ruchu*/ + double FTotal; /*! calkowita sila dzialajaca na pojazd*/ + double UnitBrakeForce; /*!s si³a hamowania przypadaj¹ca na jeden element*/ + double Ntotal; /*!s si³a nacisku klockow*/ + bool SlippingWheels; bool SandDose; /*! poslizg kol, sypanie piasku*/ + double Sand; /*ilosc piasku*/ + double BrakeSlippingTimer; /*pomocnicza zmienna do wylaczania przeciwposlizgu*/ + double dpBrake; double dpPipe; double dpMainValve; double dpLocalValve; + /*! przyrosty cisnienia w kroku czasowym*/ + double ScndPipePress; /*cisnienie w przewodzie zasilajacym*/ + double BrakePress; /*!o cisnienie w cylindrach hamulcowych*/ + double LocBrakePress; /*!o cisnienie w cylindrach hamulcowych z pomocniczego*/ + double PipeBrakePress; /*!o cisnienie w cylindrach hamulcowych z przewodu*/ + double PipePress; /*!o cisnienie w przewodzie glownym*/ + double EqvtPipePress; /*!o cisnienie w przewodzie glownym skladu*/ + double Volume; /*objetosc spr. powietrza w zbiorniku hamulca*/ + double CompressedVolume; /*objetosc spr. powietrza w ukl. zasilania*/ + double PantVolume; /*objetosc spr. powietrza w ukl. pantografu*/ + double Compressor; /*! cisnienie w ukladzie zasilajacym*/ + bool CompressorFlag; /*!o czy wlaczona sprezarka*/ + bool PantCompFlag; /*!o czy wlaczona sprezarka pantografow*/ + bool CompressorAllow; /*! zezwolenie na uruchomienie sprezarki NBMX*/ + bool ConverterFlag; /*! czy wlaczona przetwornica NBMX*/ + bool ConverterAllow; /*zezwolenie na prace przetwornicy NBMX*/ + int BrakeCtrlPos; /*nastawa hamulca zespolonego*/ + double BrakeCtrlPosR; /*nastawa hamulca zespolonego - plynna dla FV4a*/ + double BrakeCtrlPos2; /*nastawa hamulca zespolonego - kapturek dla FV4a*/ + int LocalBrakePos; /*nastawa hamulca indywidualnego*/ + int ManualBrakePos; /*nastawa hamulca recznego*/ + double LocalBrakePosA; + int BrakeStatus; /*0 - odham, 1 - ham., 2 - uszk., 4 - odluzniacz, 8 - antyposlizg, 16 - uzyte EP, 32 - pozycja R, 64 - powrot z R*/ + bool EmergencyBrakeFlag; /*hamowanie nagle*/ + int BrakeDelayFlag; /*nastawa opoznienia ham. osob/towar/posp/exp 0/1/2/4*/ + int BrakeDelays; /*nastawy mozliwe do uzyskania*/ + int BrakeOpModeFlag; /*nastawa trybu pracy PS/PN/EP/MED 1/2/4/8*/ + int BrakeOpModes; /*nastawy mozliwe do uzyskania*/ + bool DynamicBrakeFlag; /*czy wlaczony hamulec elektrodymiczny*/ + // NapUdWsp: integer; + double LimPipePress; /*stabilizator cisnienia*/ + double ActFlowSpeed; /*szybkosc stabilizatora*/ + + + int DamageFlag; //kombinacja bitowa stalych dtrain_* } + int EngDmgFlag; //kombinacja bitowa stalych usterek} + int DerailReason; //przyczyna wykolejenia + + //EndSignalsFlag: byte; {ABu 060205: zmiany - koncowki: 1/16 - swiatla prz/tyl, 2/31 - blachy prz/tyl} + //HeadSignalsFlag: byte; {ABu 060205: zmiany - swiatla: 1/2/4 - przod, 16/32/63 - tyl} + TCommand CommandIn; + /*komenda przekazywana przez PutCommand*/ + /*i wykonywana przez RunInternalCommand*/ + std::string CommandOut; /*komenda przekazywana przez ExternalCommand*/ + std::string CommandLast; //Ra: ostatnio wykonana komenda do podgl¹du + double ValueOut; /*argument komendy która ma byc przekazana na zewnatrz*/ + + TTrackShape RunningShape;/*geometria toru po ktorym jedzie pojazd*/ + TTrackParam RunningTrack;/*parametry toru po ktorym jedzie pojazd*/ + double OffsetTrackH; double OffsetTrackV; /*przesuniecie poz. i pion. w/m osi toru*/ + + /*-zmienne dla lokomotyw*/ + bool Mains; /*polozenie glownego wylacznika*/ + int MainCtrlPos; /*polozenie glownego nastawnika*/ + int ScndCtrlPos; /*polozenie dodatkowego nastawnika*/ + int LightsPos; + int ActiveDir; //czy lok. jest wlaczona i w ktorym kierunku: + //wzglêdem wybranej kabiny: -1 - do tylu, +1 - do przodu, 0 - wylaczona + int CabNo; //numer kabiny, z której jest sterowanie: 1 lub -1; w przeciwnym razie brak sterowania - rozrzad + int DirAbsolute; //zadany kierunek jazdy wzglêdem sprzêgów (1=w strone 0,-1=w stronê 1) + int ActiveCab; //numer kabiny, w ktorej jest obsada (zwykle jedna na sk³ad) + double LastSwitchingTime; /*czas ostatniego przelaczania czegos*/ + //WarningSignal: byte; {0: nie trabi, 1,2: trabi} + bool DepartureSignal; /*sygnal odjazdu*/ + bool InsideConsist; + /*-zmienne dla lokomotywy elektrycznej*/ + TTractionParam RunningTraction;/*parametry sieci trakcyjnej najblizej lokomotywy*/ + double enrot; double Im; double Itot; double IHeating; double ITraction; double TotalCurrent; double Mm; double Mw; double Fw; double Ft; + /*ilosc obrotow, prad silnika i calkowity, momenty, sily napedne*/ + //Ra: Im jest ujemny, jeœli lok jedzie w stronê sprzêgu 1 + //a ujemne powinien byæ przy odwróconej polaryzacji sieci... + //w wielu miejscach jest u¿ywane abs(Im) + int Imin; int Imax; /*prad przelaczania automatycznego rozruchu, prad bezpiecznika*/ + double Voltage; /*aktualne napiecie sieci zasilajacej*/ + int MainCtrlActualPos; /*wskaznik RList*/ + int ScndCtrlActualPos; /*wskaznik MotorParam*/ + bool DelayCtrlFlag; //czy czekanie na 1. pozycji na za³¹czenie? + double LastRelayTime; /*czas ostatniego przelaczania stycznikow*/ + bool AutoRelayFlag; /*mozna zmieniac jesli AutoRelayType=2*/ + bool FuseFlag; /*!o bezpiecznik nadmiarowy*/ + bool ConvOvldFlag; /*! nadmiarowy przetwornicy i ogrzewania*/ + bool StLinFlag; /*!o styczniki liniowe*/ + bool ResistorsFlag; /*!o jazda rezystorowa*/ + double RventRot; /*!s obroty wentylatorow rozruchowych*/ + bool UnBrake; /*w EZT - nacisniete odhamowywanie*/ + double PantPress; /*Cisnienie w zbiornikach pantografow*/ + bool s_CAtestebrake; //hunter-091012: zmienna dla testu ca + + + /*-zmienne dla lokomotywy spalinowej z przekladnia mechaniczna*/ + double dizel_fill; /*napelnienie*/ + double dizel_engagestate; /*sprzeglo skrzyni biegow: 0 - luz, 1 - wlaczone, 0.5 - wlaczone 50% (z poslizgiem)*/ + double dizel_engage; /*sprzeglo skrzyni biegow: aktualny docisk*/ + double dizel_automaticgearstatus; /*0 - bez zmiany, -1 zmiana na nizszy +1 zmiana na wyzszy*/ + bool dizel_enginestart; /*czy trwa rozruch silnika*/ + double dizel_engagedeltaomega; /*roznica predkosci katowych tarcz sprzegla*/ + + /*- zmienne dla lokomotyw z silnikami indukcyjnymi -*/ + double eimv[21]; + + /*-zmienne dla drezyny*/ + double PulseForce; /*przylozona sila*/ + double PulseForceTimer; + int PulseForceCount; + + /*dla drezyny, silnika spalinowego i parowego*/ + double eAngle; + + /*-dla wagonow*/ + long Load; /*masa w T lub ilosc w sztukach - zaladowane*/ + std::string LoadType; /*co jest zaladowane*/ + int LoadStatus; //+1=trwa rozladunek,+2=trwa zaladunek,+4=zakoñczono,0=zaktualizowany model + double LastLoadChangeTime; //raz (roz)³adowania + + bool DoorBlocked; //Czy jest blokada drzwi + bool DoorLeftOpened; //stan drzwi + bool DoorRightOpened; + bool PantFrontUp; //stan patykow 'Winger 160204 + bool PantRearUp; + bool PantFrontSP; //dzwiek patykow 'Winger 010304 + bool PantRearSP; + int PantFrontStart; //stan patykow 'Winger 160204 + int PantRearStart; + double PantFrontVolt; //pantograf pod napieciem? 'Winger 160404 + double PantRearVolt; + std::string PantSwitchType; + std::string ConvSwitchType; + + bool Heating; //ogrzewanie 'Winger 020304 + int DoubleTr; //trakcja ukrotniona - przedni pojazd 'Winger 160304 + + bool PhysicActivation; + + /*ABu: stale dla wyznaczania sil (i nie tylko) po optymalizacji*/ + double FrictConst1; + double FrictConst2s; + double FrictConst2d; + double TotalMassxg; /*TotalMass*g*/ + + vector3 vCoulpler[2]; // powtórzenie wspó³rzêdnych sprzêgów z DynObj :/ + vector3 DimHalf; // po³owy rozmiarów do obliczeñ geometrycznych + // int WarningSignal; //0: nie trabi, 1,2: trabi syren¹ o podanym numerze + int WarningSignal; // tymczasowo 8bit, ze wzglêdu na funkcje w MTools + double fBrakeCtrlPos; // p³ynna nastawa hamulca zespolonego + bool bPantKurek3; // kurek trójdrogowy (pantografu): true=po³¹czenie z ZG, false=po³¹czenie z ma³¹ sprê¿ark¹ + 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); + +public: + TMoverParameters(double VelInitial, std::string TypeNameInit, std::string NameInit, int LoadInitial, std::string LoadTypeInitial, int Cab); + // obs³uga sprzêgów + double Distance(const TLocation &Loc1, const TLocation &Loc2, const TDimension &Dim1, const TDimension &Dim2); + double Distance(const vector3 &Loc1, const vector3 &Loc2, const vector3 &Dim1, const vector3 &Dim2); + bool AttachA(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false); + bool Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false); + int DettachStatus(int ConnectNo); + bool Dettach(int ConnectNo); + void SetCoupleDist(); + bool DirectionForward(); + void BrakeLevelSet(double b); + bool BrakeLevelAdd(double b); + bool IncBrakeLevel(); // wersja na u¿ytek AI + bool DecBrakeLevel(); + bool ChangeCab(int direction); + bool CurrentSwitch(int direction); + void UpdateBatteryVoltage(double dt); + double ComputeMovement(double dt, double dt1, const TTrackShape &Shape, TTrackParam &Track, TTractionParam &ElectricTraction, const TLocation &NewLoc, TRotation &NewRot); //oblicza przesuniecie pojazdu + double FastComputeMovement(double dt, const TTrackShape &Shape, TTrackParam &Track, const TLocation &NewLoc, TRotation &NewRot); //oblicza przesuniecie pojazdu - wersja zoptymalizowana + double ShowEngineRotation(int VehN); + + // Q ******************************************************************************************* + double GetTrainsetVoltage(void); + bool Physic_ReActivation(void); + double LocalBrakeRatio(void); + double ManualBrakeRatio(void); + double PipeRatio(void);/*ile napelniac*/ + double RealPipeRatio(void);/*jak szybko*/ + double BrakeVP(void); + + /*! przesylanie komend sterujacych*/ + bool SendCtrlBroadcast(std::string CtrlCommand, double ctrlvalue); + bool SendCtrlToNext(std::string CtrlCommand, double ctrlvalue, double dir); + bool SetInternalCommand(std::string NewCommand, double NewValue1, double NewValue2); + double GetExternalCommand(std::string &Command); + bool RunCommand(std::string command, double CValue1, double CValue2); + bool RunInternalCommand(void); + void PutCommand(std::string NewCommand, double NewValue1, double NewValue2, const TLocation &NewLocation); + bool CabActivisation(void); + bool CabDeactivisation(void); + + /*! funkcje zwiekszajace/zmniejszajace nastawniki*/ + /*! glowny nastawnik:*/ + bool IncMainCtrl(int CtrlSpeed); + bool DecMainCtrl(int CtrlSpeed); + /*! pomocniczy nastawnik:*/ + bool IncScndCtrl(int CtrlSpeed); + bool DecScndCtrl(int CtrlSpeed); + + + bool AddPulseForce(int Multipler);/*dla drezyny*/ + + bool SandDoseOn(void);/*wlacza/wylacza sypanie piasku*/ + + /*! zbijanie czuwaka/SHP*/ + void SSReset(void); + bool SecuritySystemReset(void); + void SecuritySystemCheck(double dt); + + bool BatterySwitch(bool State); + bool EpFuseSwitch(bool State); + + /*! stopnie hamowania - hamulec zasadniczy*/ + bool IncBrakeLevelOld(void); + bool DecBrakeLevelOld(void); + bool IncLocalBrakeLevel(int CtrlSpeed); + bool DecLocalBrakeLevel(int CtrlSpeed); + /*! ABu 010205: - skrajne polozenia ham. pomocniczego*/ + bool IncLocalBrakeLevelFAST(void); + bool DecLocalBrakeLevelFAST(void); + bool IncManualBrakeLevel(int CtrlSpeed); + bool DecManualBrakeLevel(int CtrlSpeed); + bool DynamicBrakeSwitch(bool Switch); + bool EmergencyBrakeSwitch(bool Switch); + bool AntiSlippingBrake(void); + bool BrakeReleaser(int state); + bool SwitchEPBrake(int state); + bool AntiSlippingButton(void); /*! reczny wlacznik urzadzen antyposlizgowych*/ + + /*funkcje dla ukladow pneumatycznych*/ + bool IncBrakePress(double &brake, double PressLimit, double dp); + bool DecBrakePress(double &brake, double PressLimit, double dp); + bool BrakeDelaySwitch(int BDS);/*! przelaczanie nastawy opoznienia*/ + bool IncBrakeMult(void);/*przelaczanie prozny/ladowny*/ + bool DecBrakeMult(void); + /*pomocnicze funkcje dla ukladow pneumatycznych*/ + void UpdateBrakePressure(double dt); + void UpdatePipePressure(double dt); + void CompressorCheck(double dt);/*wlacza, wylacza kompresor, laduje zbiornik*/ + void UpdatePantVolume(double dt); //Ra + void UpdateScndPipePressure(double dt); + double GetDVc(double dt); + + /*funkcje obliczajace sily*/ + void ComputeConstans(void);//ABu: wczesniejsze wyznaczenie stalych dla liczenia sil + double ComputeMass(void); + void ComputeTotalForce(double dt, double dt1, bool FullVer); + double Adhesive(double staticfriction); + double TractionForce(double dt); + double FrictionForce(double R, int TDamage); + double BrakeForce(const TTrackParam &Track); + double CouplerForce(int CouplerN, double dt); + void CollisionDetect(int CouplerN, double dt); + /*obrot kol uwzgledniajacy poslizg*/ + double ComputeRotatingWheel(double WForce, double dt, double n); + + /*--funkcje dla lokomotyw*/ + bool DirectionBackward(void);/*! kierunek ruchu*/ + bool MainSwitch(bool State);/*! wylacznik glowny*/ + bool ConverterSwitch(bool State);/*! wl/wyl przetwornicy*/ + bool CompressorSwitch(bool State);/*! wl/wyl sprezarki*/ + + /*-funkcje typowe dla lokomotywy elektrycznej*/ + void ConverterCheck(); // przetwornica + bool FuseOn(void); //bezpiecznik nadamiary + bool FuseFlagCheck(void); // sprawdzanie flagi nadmiarowego + void FuseOff(void); // wylaczenie nadmiarowego + int ShowCurrent(int AmpN); //pokazuje bezwgl. wartosc pradu na wybranym amperomierzu + int ShowCurrentP(int AmpN); //pokazuje bezwgl. wartosc pradu w wybranym pojezdzie //Q 20160722 + + /*!o pokazuje bezwgl. wartosc obrotow na obrotomierzu jednego z 3 pojazdow*/ + /*function ShowEngineRotation(VehN:int): integer; //Ra 2014-06: przeniesione do C++*/ + /*funkcje uzalezniajace sile pociagowa od predkosci: v2n, n2r, current, momentum*/ + double v2n(void); + double current(double n, double U); + double Momentum(double I); + double MomentumF(double I, double Iw, int SCP); + + bool CutOffEngine(void); //odlaczenie udszkodzonych silnikow + /*funkcje automatycznego rozruchu np EN57*/ + bool MaxCurrentSwitch(bool State); //przelacznik pradu wysokiego rozruchu + bool MinCurrentSwitch(bool State); //przelacznik pradu automatycznego rozruchu + bool AutoRelaySwitch(bool State); //przelacznik automatycznego rozruchu + bool AutoRelayCheck(void);//symulacja automatycznego rozruchu + + bool ResistorsFlagCheck(void); //sprawdzenie kontrolki oporow rozruchowych NBMX + bool PantFront(bool State); //obsluga pantografou przedniego + bool PantRear(bool State); //obsluga pantografu tylnego + + /*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/ + bool dizel_EngageSwitch(double state); + bool dizel_EngageChange(double dt); + bool dizel_AutoGearCheck(void); + double dizel_fillcheck(int mcp); + double dizel_Momentum(double dizel_fill, double n, double dt); + bool dizel_Update(double dt); + + /* funckje dla wagonow*/ + bool LoadingDone(double LSpeed, std::string LoadInit); + bool DoorLeft(bool State); //obsluga drzwi lewych + bool DoorRight(bool State); //obsluga drzwi prawych + bool DoorBlockedFlag(void); //sprawdzenie blokady drzwi + + /* funkcje dla samochodow*/ + bool ChangeOffsetH(double DeltaOffset); + + /*funkcje ladujace pliki opisujace pojazd*/ + bool LoadFIZ(std::string chkpath); //Q 20160717 bool LoadChkFile(std::string chkpath); + bool readMPT(int ln, std::string xline); //Q 20160717 + bool readRLIST(int ln, std::string xline); //Q 20160718 + bool readBPT(int ln, std::string xline); //Q 20160721 + void BrakeValveDecode(std::string s); //Q 20160719 + void BrakeSubsystemDecode(); //Q 20160719 + void PowerParamDecode(std::string lines, std::string prefix, TPowerParameters &PowerParamDecode); //Q 20160719 + TPowerSource PowerSourceDecode(std::string s); //Q 20160719 + TPowerType PowerDecode(std::string s); //Q 20160719 + TEngineTypes EngineDecode(std::string s); //Q 20160721 + bool CreateBrakeSys(); //Q 20160722 + bool CheckLocomotiveParametersQ(bool ReadyFlag, int Dir); + std::string EngineDescription(int what); +}; + +extern double Distance(TLocation Loc1, TLocation Loc2, TDimension Dim1, TDimension Dim2); + +#endif diff --git a/McZapkie/mctools.h b/McZapkie/mctools.h index e3250bd0..482705f0 100644 --- a/McZapkie/mctools.h +++ b/McZapkie/mctools.h @@ -69,6 +69,20 @@ inline int Random() return rand(); } +inline double BorlandTime() +{ + std::tm epoch; + epoch.tm_sec = 0; + epoch.tm_min = 0; + epoch.tm_hour = 0; + epoch.tm_mday = 1; + epoch.tm_mon = 0; + epoch.tm_year = 0; + time_t basetime = mktime(&epoch); + time_t raw_t = time(NULL); + return (difftime(raw_t, basetime) / 24) + 2; +} + /*funkcje logiczne*/ bool TestFlag(int Flag, int Value); bool SetFlag( int & Flag, int Value); diff --git a/Track.h b/Track.h index bf736ff4..643f91fb 100644 --- a/Track.h +++ b/Track.h @@ -101,7 +101,7 @@ class TIsolated TIsolated *pNext; // odcinki izolowane s¹ trzymane w postaci listy jednikierunkowej static TIsolated *pRoot; // pocz¹tek listy public: - AnsiString asName; // nazwa obiektu, baza do nazw eventów + std::string asName; // nazwa obiektu, baza do nazw eventów TEvent *evBusy; // zdarzenie wyzwalane po zajêciu grupy 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 diff --git a/Train.cpp b/Train.cpp index 7f4716c0..9557b646 100644 --- a/Train.cpp +++ b/Train.cpp @@ -5007,7 +5007,7 @@ bool TTrain::CabChange(int iDirection) // McZapkie-310302 // wczytywanie pliku z danymi multimedialnymi (dzwieki, kontrolki, kabiny) -bool TTrain::LoadMMediaFile(AnsiString asFileName) +bool TTrain::LoadMMediaFile(std::string asFileName) { double dSDist; TFileStream *fs; @@ -5296,7 +5296,7 @@ bool TTrain::LoadMMediaFile(AnsiString asFileName) } } -bool TTrain::InitializeCab(int NewCabNo, AnsiString asFileName) +bool TTrain::InitializeCab(int NewCabNo, std::string asFileName) { pyScreens.reset(this); pyScreens.setLookupPath(DynamicObject->asBaseDir); diff --git a/Train.h b/Train.h index a2e25abd..3a881ae9 100644 --- a/Train.h +++ b/Train.h @@ -24,6 +24,7 @@ http://mozilla.org/MPL/2.0/. #include "RealSound.h" #include "FadeSound.h" #include "PyInt.h" +#include // typedef enum {st_Off, st_Starting, st_On, st_ShuttingDown} T4State; @@ -73,7 +74,7 @@ class TTrain bool CabChange(int iDirection); bool ActiveUniversal4; bool ShowNextCurrent; // pokaz przd w podlaczonej lokomotywie (ET41) - bool InitializeCab(int NewCabNo, AnsiString asFileName); + bool InitializeCab(int NewCabNo, std::string asFileName); TTrain(); ~TTrain(); // bool Init(TTrack *Track); @@ -98,7 +99,7 @@ class TTrain void SetLights(); // virtual bool RenderAlpha(); // McZapkie-310302: ladowanie parametrow z pliku - bool LoadMMediaFile(AnsiString asFileName); + bool LoadMMediaFile(std::string asFileName); PyObject *GetTrainState(); private: //¿eby go nic z zewn¹trz nie przestawia³o diff --git a/World.cpp b/World.cpp index d9fe26a4..c94e92f7 100644 --- a/World.cpp +++ b/World.cpp @@ -31,6 +31,7 @@ http://mozilla.org/MPL/2.0/. #include "Train.h" #include "Driver.h" #include "Console.h" +#include #define TEXTURE_FILTER_CONTROL_EXT 0x8500 #define TEXTURE_LOD_BIAS_EXT 0x8501 @@ -1714,7 +1715,7 @@ bool TWorld::Update() if (DebugModeFlag && !Global::iTextMode) { OutText1 = " FPS: "; - OutText1 += FloatToStrF(GetFPS(), ffFixed, 6, 2); + OutText1 += to_string(GetFPS(), 2); OutText1 += Global::iSlowMotion ? "s" : "n"; OutText1 += (GetDeltaTime() >= 0.2) ? "!" : " "; @@ -1732,11 +1733,12 @@ bool TWorld::Update() { Global::iViewMode = VK_F8; OutText1 = " FPS: "; - OutText1 += FloatToStrF(GetFPS(), ffFixed, 6, 2); + OutText1 += to_string(GetFPS(), 2); + //OutText1 += sprintf(); if (Global::iSlowMotion) - OutText1 += " (slowmotion " + AnsiString(Global::iSlowMotion) + ")"; + OutText1 += " (slowmotion " + to_string(Global::iSlowMotion) + ")"; OutText1 += ", sectors: "; - OutText1 += AnsiString(Ground.iRendered); + OutText1 += to_string(Ground.iRendered); } // if (Console::Pressed(VK_F7)) @@ -1864,7 +1866,7 @@ bool TWorld::Update() glDisable(GL_LIGHTING); if (Controlled) - SetWindowText(hWnd, AnsiString(Controlled->MoverParameters->Name).c_str()); + SetWindowText(hWnd, Controlled->MoverParameters->Name.c_str()); else SetWindowText(hWnd, Global::szSceneryFile); // nazwa scenerii glBindTexture(GL_TEXTURE_2D, 0); @@ -1876,26 +1878,26 @@ bool TWorld::Update() { // tekst pokazywany po wciœniêciu [F1] // Global::iViewMode=VK_F1; glColor3f(1.0f, 1.0f, 1.0f); // a, damy bia³ym - OutText1 = "Time: " + AnsiString((int)GlobalTime->hh) + ":"; + OutText1 = "Time: " + to_string((int)GlobalTime->hh) + ":"; int i = GlobalTime->mm; // bo inaczej potrafi zrobiæ "hh:010" if (i < 10) OutText1 += "0"; - OutText1 += AnsiString(i); // minuty + OutText1 += to_string(i); // minuty OutText1 += ":"; i = floor(GlobalTime->mr); // bo inaczej potrafi zrobiæ "hh:mm:010" if (i < 10) OutText1 += "0"; - OutText1 += AnsiString(i); + OutText1 += to_string(i); if (Global::iPause) OutText1 += " - paused"; if (Controlled) if (Controlled->Mechanik) { - OutText2 = Controlled->Mechanik->Relation().c_str(); - if (!OutText2.IsEmpty()) // jeœli jest podana relacja, to dodajemy punkt nastêpnego + OutText2 = Controlled->Mechanik->Relation(); + if (!OutText2.empty()) // jeœli jest podana relacja, to dodajemy punkt nastêpnego // zatrzymania OutText2 = - Global::Bezogonkow(OutText2 + ": -> " + Controlled->Mechanik->NextStop().c_str(), + Global::Bezogonkow(OutText2 + ": -> " + Controlled->Mechanik->NextStop(), true); // dopisanie punktu zatrzymania } // double CtrlPos=mvControlled->MainCtrlPos; @@ -1906,9 +1908,9 @@ bool TWorld::Update() } else if (Global::iTextMode == VK_F12) { // opcje w³¹czenia i wy³¹czenia logowania - OutText1 = "[0] Debugmode " + AnsiString(DebugModeFlag ? "(on)" : "(off)"); - OutText2 = "[1] log.txt " + AnsiString((Global::iWriteLogEnabled & 1) ? "(on)" : "(off)"); - OutText3 = "[2] Console " + AnsiString((Global::iWriteLogEnabled & 2) ? "(on)" : "(off)"); + OutText1 = "[0] Debugmode " + string(DebugModeFlag ? "(on)" : "(off)"); + OutText2 = "[1] log.txt " + string((Global::iWriteLogEnabled & 1) ? "(on)" : "(off)"); + OutText3 = "[2] Console " + string((Global::iWriteLogEnabled & 2) ? "(on)" : "(off)"); } else if (Global::iTextMode == VK_F2) { // ABu: info dla najblizszego pojazdu! @@ -1919,7 +1921,7 @@ bool TWorld::Update() if (Global::iScreenMode[Global::iTextMode - VK_F1] == 0) { // jeœli domyœlny ekran po pierwszym naciœniêciu OutText3 = ""; - OutText1 = "Vehicle name: " + AnsiString(tmp->MoverParameters->Name); + OutText1 = "Vehicle name: " + tmp->MoverParameters->Name; // yB OutText1+="; d: "+FloatToStrF(tmp->ABuGetDirection(),ffFixed,2,0); // OutText1=FloatToStrF(tmp->MoverParameters->Couplers[0].CouplingFlag,ffFixed,3,2)+", // "; @@ -1929,9 +1931,9 @@ bool TWorld::Update() OutText1 += ", command: " + tmp->Mechanik->OrderCurrent(); } else if (tmp->ctOwner) - OutText1 += ", owned by " + AnsiString(tmp->ctOwner->OwnerName()); - if (!tmp->MoverParameters->CommandLast.IsEmpty()) - OutText1 += AnsiString(", put: ") + tmp->MoverParameters->CommandLast; + OutText1 += ", owned by " + tmp->ctOwner->OwnerName(); + if (!tmp->MoverParameters->CommandLast.empty()) + OutText1 += ", put: " + tmp->MoverParameters->CommandLast; // OutText1+="; Cab="+AnsiString(tmp->MoverParameters->CabNo); OutText2 = "Damage status: " + tmp->MoverParameters->EngineDescription(0); //+" Engine status: "; @@ -1944,13 +1946,13 @@ bool TWorld::Update() OutText2 += "R"; if ((tmp->MoverParameters->BrakeDelayFlag & bdelay_M) == bdelay_M) OutText2 += "+Mg"; - OutText2 += AnsiString(", BTP:") + - FloatToStrF(tmp->MoverParameters->LoadFlag, ffFixed, 5, 0); + OutText2 += ", BTP:" + + to_string(tmp->MoverParameters->LoadFlag, 0); // if ((tmp->MoverParameters->EnginePowerSource.SourceType==CurrentCollector) || // (tmp->MoverParameters->TrainType==dt_EZT)) { - OutText2 += AnsiString("; pant. ") + - FloatToStrF(tmp->MoverParameters->PantPress, ffFixed, 8, 2); + OutText2 += "; pant. " + + to_string(tmp->MoverParameters->PantPress, 2); OutText2 += (tmp->MoverParameters->bPantKurek3 ? "MoverParameters->u,ffFixed,3,3); // OutText2+=AnsiString(", // N:")+FloatToStrF(tmp->MoverParameters->Ntotal,ffFixed,4,0); - OutText2 += AnsiString(", MED:") + - FloatToStrF(tmp->MoverParameters->LocalBrakePosA, ffFixed, 6, 2); - OutText2 += AnsiString("+") + - FloatToStrF(tmp->MoverParameters->AnPos, ffFixed, 6, 2); - OutText2 += AnsiString(", Ft:") + - FloatToStrF(tmp->MoverParameters->Ft * 0.001f, ffFixed, 4, 0); - OutText2 += AnsiString(", HV0:") + - FloatToStrF(tmp->MoverParameters->HVCouplers[0][1], ffFixed, 4, 0); - OutText2 += AnsiString("@") + - FloatToStrF(tmp->MoverParameters->HVCouplers[0][0], ffFixed, 4, 0); - OutText2 += AnsiString("+HV1:") + - FloatToStrF(tmp->MoverParameters->HVCouplers[1][1], ffFixed, 4, 0); - OutText2 += AnsiString("@") + - FloatToStrF(tmp->MoverParameters->HVCouplers[1][0], ffFixed, 4, 0); - OutText2 += AnsiString(" TC:") + - FloatToStrF(tmp->MoverParameters->TotalCurrent, ffFixed, 4, 0); + OutText2 += ", MED:" + + to_string(tmp->MoverParameters->LocalBrakePosA, 2); + OutText2 += "+" + + to_string(tmp->MoverParameters->AnPos, 2); + OutText2 += ", Ft:" + + to_string(tmp->MoverParameters->Ft * 0.001f, 0); + OutText2 += ", HV0:" + + to_string(tmp->MoverParameters->HVCouplers[0][1], 0); + OutText2 += "@" + + to_string(tmp->MoverParameters->HVCouplers[0][0], 0); + OutText2 += "+HV1:" + + to_string(tmp->MoverParameters->HVCouplers[1][1], 0); + OutText2 += "@" + + to_string(tmp->MoverParameters->HVCouplers[1][0], 0); + OutText2 += " TC:" + + to_string(tmp->MoverParameters->TotalCurrent, 0); // OutText3= AnsiString("BP: // ")+FloatToStrF(tmp->MoverParameters->BrakePress,ffFixed,5,2)+AnsiString(", // "); @@ -2008,27 +2010,27 @@ bool TWorld::Update() // OutText2+= " GetLast: // "+AnsiString(tmp->GetLastDynamic(1)->MoverParameters->Name)+" Damage // status="+tmp->MoverParameters->EngineDescription(0)+" Engine status: "; - OutText3 = AnsiString("BP: ") + - FloatToStrF(tmp->MoverParameters->BrakePress, ffFixed, 5, 2) + - AnsiString(", "); - OutText3 += FloatToStrF(tmp->MoverParameters->BrakeStatus, ffFixed, 5, 0) + - AnsiString(", "); - OutText3 += AnsiString("PP: ") + - FloatToStrF(tmp->MoverParameters->PipePress, ffFixed, 5, 2) + - AnsiString("/"); - OutText3 += FloatToStrF(tmp->MoverParameters->ScndPipePress, ffFixed, 5, 2) + - AnsiString("/"); - OutText3 += FloatToStrF(tmp->MoverParameters->EqvtPipePress, ffFixed, 5, 2) + - AnsiString(", "); - OutText3 += AnsiString("BVP: ") + - FloatToStrF(tmp->MoverParameters->Volume, ffFixed, 5, 3) + - AnsiString(", "); - OutText3 += FloatToStrF(tmp->MoverParameters->CntrlPipePress, ffFixed, 5, 3) + - AnsiString(", "); - OutText3 += FloatToStrF(tmp->MoverParameters->Hamulec->GetCRP(), ffFixed, 5, 3) + - AnsiString(", "); - OutText3 += FloatToStrF(tmp->MoverParameters->BrakeStatus, ffFixed, 5, 0) + - AnsiString(", "); + OutText3 = ("BP: ") + + to_string(tmp->MoverParameters->BrakePress, 2) + + (", "); + OutText3 += to_string(tmp->MoverParameters->BrakeStatus, 0) + + (", "); + OutText3 += ("PP: ") + + to_string(tmp->MoverParameters->PipePress, 2) + + ("/"); + OutText3 += to_string(tmp->MoverParameters->ScndPipePress, 2) + + ("/"); + OutText3 += to_string(tmp->MoverParameters->EqvtPipePress, 2) + + (", "); + OutText3 += ("BVP: ") + + to_string(tmp->MoverParameters->Volume, 3) + + (", "); + OutText3 += to_string(tmp->MoverParameters->CntrlPipePress, 3) + + (", "); + OutText3 += to_string(tmp->MoverParameters->Hamulec->GetCRP(), 3) + + (", "); + OutText3 += to_string(tmp->MoverParameters->BrakeStatus, 0) + + (", "); // OutText3+=AnsiString("BVP: // ")+FloatToStrF(tmp->MoverParameters->BrakeVP(),ffFixed,5,2)+AnsiString(", // "); @@ -2041,11 +2043,11 @@ bool TWorld::Update() // "); if (tmp->MoverParameters->ManualBrakePos > 0) - OutText3 += AnsiString("manual brake active. "); + OutText3 += ("manual brake active. "); else if (tmp->MoverParameters->LocalBrakePos > 0) - OutText3 += AnsiString("local brake active. "); + OutText3 += ("local brake active. "); else - OutText3 += AnsiString("local brake inactive. "); + OutText3 += ("local brake inactive. "); /* //OutText3+=AnsiString("LSwTim: ")+FloatToStrF(tmp->MoverParameters->LastSwitchingTime,ffFixed,5,2); @@ -2077,20 +2079,20 @@ bool TWorld::Update() // OutText4=tmp->Mechanik->StopReasonText(); // if (!OutText4.IsEmpty()) OutText4+="; "; //aby ³adniejszy odstêp by³ // if (Controlled->Mechanik && (Controlled->Mechanik->AIControllFlag==AIdriver)) - AnsiString flags = "bwaccmlshhhoibsgvdp; "; // flagi AI (definicja w Driver.h) - for (int i = 0, j = 1; i < 19; ++i, j <<= 1) - if (tmp->Mechanik->DrivigFlags() & j) // jak bit ustawiony - flags[i + 1] ^= 0x20; // to zmiana na wielk¹ literê + std::string flags = "bwaccmlshhhoibsgvdp; "; // flagi AI (definicja w Driver.h) + for (int i = 0, j = 1; i < 19; ++i, j <<= 1) + if (tmp->Mechanik->DrivigFlags() & j) // jak bit ustawiony + toupper(flags[i + 1]); // ^= 0x20; // to zmiana na wielk¹ literê OutText4 = flags; OutText4 += - AnsiString("Driver: Vd=") + - FloatToStrF(tmp->Mechanik->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") + - FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") + - FloatToStrF(tmp->Mechanik->ActualProximityDist, ffFixed, 4, 0) + - AnsiString(" Vn=") + FloatToStrF(tmp->Mechanik->VelNext, ffFixed, 4, 0) + - AnsiString(" VSm=") + FloatToStrF(tmp->Mechanik->VelSignalLast, ffFixed, 4, 0) + - AnsiString(" VLm=") + FloatToStrF(tmp->Mechanik->VelLimitLast, ffFixed, 4, 0) + - AnsiString(" VRd=") + FloatToStrF(tmp->Mechanik->VelRoad, ffFixed, 4, 0); + ("Driver: Vd=") + + to_string(tmp->Mechanik->VelDesired, 0) + (" ad=") + + to_string(tmp->Mechanik->AccDesired, 2) + (" Pd=") + + to_string(tmp->Mechanik->ActualProximityDist, 0) + + (" Vn=") + to_string(tmp->Mechanik->VelNext, 0) + + (" VSm=") + to_string(tmp->Mechanik->VelSignalLast, 0) + + (" VLm=") + to_string(tmp->Mechanik->VelLimitLast, 0) + + (" VRd=") + to_string(tmp->Mechanik->VelRoad, 0); if (tmp->Mechanik->VelNext == 0.0) if (tmp->Mechanik->eSignNext) { // jeœli ma zapamiêtany event semafora @@ -2100,19 +2102,19 @@ bool TWorld::Update() ")"; // nazwa eventu semafora } } - if (!OutText4.IsEmpty()) + if (!OutText4.empty()) OutText4 += "; "; // aby ³adniejszy odstêp by³ // informacja o sprzêgach nawet bez mechanika OutText4 += "C0=" + (tmp->PrevConnected ? tmp->PrevConnected->GetName() + ":" + - AnsiString(tmp->MoverParameters->Couplers[0].CouplingFlag) : - AnsiString("NULL")); + to_string(tmp->MoverParameters->Couplers[0].CouplingFlag) : + string("NULL")); OutText4 += " C1=" + (tmp->NextConnected ? tmp->NextConnected->GetName() + ":" + - AnsiString(tmp->MoverParameters->Couplers[1].CouplingFlag) : - AnsiString("NULL")); + to_string(tmp->MoverParameters->Couplers[1].CouplingFlag) : + string("NULL")); if (Console::Pressed(VK_F2)) { WriteLog(OutText1); @@ -2130,18 +2132,18 @@ bool TWorld::Update() glRasterPos2f(-0.25f, 0.20f); // OutText1="Scan distance: "+AnsiString(tmp->Mechanik->scanmax)+", back: // "+AnsiString(tmp->Mechanik->scanback); - OutText1 = "Time: " + AnsiString((int)GlobalTime->hh) + ":"; + OutText1 = "Time: " + to_string((int)GlobalTime->hh) + ":"; int i = GlobalTime->mm; // bo inaczej potrafi zrobiæ "hh:010" if (i < 10) OutText1 += "0"; - OutText1 += AnsiString(i); // minuty + OutText1 += to_string(i); // minuty OutText1 += ":"; i = floor(GlobalTime->mr); // bo inaczej potrafi zrobiæ "hh:mm:010" if (i < 10) OutText1 += "0"; - OutText1 += AnsiString(i); + OutText1 += to_string(i); OutText1 += - AnsiString(". Vel: ") + FloatToStrF(tmp->GetVelocity(), ffFixed, 6, 1); + (". Vel: ") + to_string(tmp->GetVelocity(), 1); OutText1 += ". Scan table:"; glPrint(Global::Bezogonkow(OutText1).c_str()); i = -1; @@ -2152,15 +2154,15 @@ bool TWorld::Update() } // podsumowanie sensu tabelki OutText4 = - AnsiString("Driver: Vd=") + - FloatToStrF(tmp->Mechanik->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") + - FloatToStrF(tmp->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") + - FloatToStrF(tmp->Mechanik->ActualProximityDist, ffFixed, 4, 0) + - AnsiString(" Vn=") + FloatToStrF(tmp->Mechanik->VelNext, ffFixed, 4, 0) + - AnsiString("\n VSm=") + FloatToStrF(tmp->Mechanik->VelSignalLast, ffFixed, 4, 0) + - AnsiString(" VLm=") + FloatToStrF(tmp->Mechanik->VelLimitLast, ffFixed, 4, 0) + - AnsiString(" VRd=") + FloatToStrF(tmp->Mechanik->VelRoad, ffFixed, 4, 0) + - AnsiString(" VSig=") + FloatToStrF(tmp->Mechanik->VelSignal, ffFixed, 4, 0); + ("Driver: Vd=") + + to_string(tmp->Mechanik->VelDesired, 0) + (" ad=") + + to_string(tmp->Mechanik->AccDesired, 2) + (" Pd=") + + to_string(tmp->Mechanik->ActualProximityDist, 0) + + (" Vn=") + to_string(tmp->Mechanik->VelNext, 0) + + ("\n VSm=") + to_string(tmp->Mechanik->VelSignalLast, 0) + + (" VLm=") + to_string(tmp->Mechanik->VelLimitLast, 0) + + (" VRd=") + to_string(tmp->Mechanik->VelRoad, 0) + + (" VSig=") + to_string(tmp->Mechanik->VelSignal, 0); if (tmp->Mechanik->VelNext == 0.0) if (tmp->Mechanik->eSignNext) { // jeœli ma zapamiêtany event semafora @@ -2176,16 +2178,15 @@ bool TWorld::Update() } // koniec obs³ugi, gdy mamy wskaŸnik do pojazdu else { // wyœwietlenie wspó³rzêdnych w scenerii oraz k¹ta kamery, gdy nie mamy wskaŸnika - OutText1 = "Camera position: " + FloatToStrF(Camera.Pos.x, ffFixed, 6, 2) + " " + - FloatToStrF(Camera.Pos.y, ffFixed, 6, 2) + " " + - FloatToStrF(Camera.Pos.z, ffFixed, 6, 2); + OutText1 = "Camera position: " + to_string(Camera.Pos.x, 2) + " " + + to_string(Camera.Pos.y, 2) + " " + + to_string(Camera.Pos.z, 2); OutText1 += ", azimuth: " + - FloatToStrF(180.0 - RadToDeg(Camera.Yaw), ffFixed, 3, - 0); // ma byæ azymut, czyli 0 na pó³nocy i roœnie na wschód + to_string(180.0 - RadToDeg(Camera.Yaw), 0); // ma byæ azymut, czyli 0 na pó³nocy i roœnie na wschód OutText1 += " " + - AnsiString("S SEE NEN NWW SW") - .SubString(1 + 2 * floor(fmod(8 + (Camera.Yaw + 0.5 * M_PI_4) / M_PI_4, 8)), 2); + string("S SEE NEN NWW SW") + .substr(1 + 2 * floor(fmod(8 + (Camera.Yaw + 0.5 * M_PI_4) / M_PI_4, 8)), 2); } // OutText3= AnsiString(" Online documentation (PL, ENG, DE, soon CZ): // http://www.eu07.pl"); @@ -2257,69 +2258,64 @@ bool TWorld::Update() { // tu mozna dodac dopisywanie do logu przebiegu lokomotywy // Global::iViewMode=VK_F10; // return false; - OutText1 = AnsiString("To quit press [Y] key."); - OutText3 = AnsiString("Aby zakonczyc program, przycisnij klawisz [Y]."); + OutText1 = ("To quit press [Y] key."); + OutText3 = ("Aby zakonczyc program, przycisnij klawisz [Y]."); } else if (Controlled && DebugModeFlag && !Global::iTextMode) { - OutText1 += AnsiString("; vel ") + FloatToStrF(Controlled->GetVelocity(), ffFixed, 6, 2); - OutText1 += AnsiString("; pos ") + FloatToStrF(Controlled->GetPosition().x, ffFixed, 6, 2); - OutText1 += AnsiString(" ; ") + FloatToStrF(Controlled->GetPosition().y, ffFixed, 6, 2); - OutText1 += AnsiString(" ; ") + FloatToStrF(Controlled->GetPosition().z, ffFixed, 6, 2); - OutText1 += AnsiString("; dist=") + - FloatToStrF(Controlled->MoverParameters->DistCounter, ffFixed, 8, 4); + OutText1 += ("; vel ") + to_string(Controlled->GetVelocity(), 2); + OutText1 += ("; pos ") + to_string(Controlled->GetPosition().x, 2); + OutText1 += (" ; ") + to_string(Controlled->GetPosition().y, 2); + OutText1 += (" ; ") + to_string(Controlled->GetPosition().z, 2); + OutText1 += ("; dist=") + to_string(Controlled->MoverParameters->DistCounter, 4); // double a= acos( DotProduct(Normalize(Controlled->GetDirection()),vWorldFront)); // OutText+= AnsiString("; angle ")+FloatToStrF(a/M_PI*180,ffFixed,6,2); - OutText1 += AnsiString("; d_omega ") + - FloatToStrF(Controlled->MoverParameters->dizel_engagedeltaomega, ffFixed, 6, 3); - OutText2 = AnsiString("HamZ=") + - FloatToStrF(Controlled->MoverParameters->fBrakeCtrlPos, ffFixed, 6, 1); - OutText2 += AnsiString("; HamP=") + AnsiString(mvControlled->LocalBrakePos); - OutText2 += AnsiString("/") + - FloatToStrF(Controlled->MoverParameters->LocalBrakePosA, ffFixed, 6, 2); - // mvControlled->MainCtrlPos; + OutText1 += + ("; d_omega ") + to_string(Controlled->MoverParameters->dizel_engagedeltaomega, 3); + OutText2 = ("HamZ=") + to_string(Controlled->MoverParameters->fBrakeCtrlPos, 1); + OutText2 += ("; HamP=") + to_string(mvControlled->LocalBrakePos); + OutText2 += ("/") + to_string(Controlled->MoverParameters->LocalBrakePosA, 2); + // mvControlled->MainCtrlPos; // if (mvControlled->MainCtrlPos<0) // OutText2+= AnsiString("; nastawnik 0"); // if (mvControlled->MainCtrlPos>iPozSzereg) - OutText2 += AnsiString("; NasJ=") + AnsiString(mvControlled->MainCtrlPos); + OutText2 += ("; NasJ=") + to_string(mvControlled->MainCtrlPos); // else // OutText2+= AnsiString("; nastawnik S") + mvControlled->MainCtrlPos; - OutText2 += AnsiString("(") + AnsiString(mvControlled->MainCtrlActualPos); + OutText2 += ("(") + to_string(mvControlled->MainCtrlActualPos); - OutText2 += AnsiString("); NasB=") + AnsiString(mvControlled->ScndCtrlPos); - OutText2 += AnsiString("(") + AnsiString(mvControlled->ScndCtrlActualPos); + OutText2 += ("); NasB=") + to_string(mvControlled->ScndCtrlPos); + OutText2 += ("(") + to_string(mvControlled->ScndCtrlActualPos); if (mvControlled->TrainType == dt_EZT) - OutText2 += AnsiString("); I=") + AnsiString(int(mvControlled->ShowCurrent(0))); + OutText2 += ("); I=") + to_string(int(mvControlled->ShowCurrent(0))); else - OutText2 += AnsiString("); I=") + AnsiString(int(mvControlled->Im)); + OutText2 += ("); I=") + to_string(int(mvControlled->Im)); // OutText2+=AnsiString("; // I2=")+FloatToStrF(Controlled->NextConnected->MoverParameters->Im,ffFixed,6,2); - OutText2 += AnsiString("; U=") + - AnsiString(int(mvControlled->RunningTraction.TractionVoltage + 0.5)); + OutText2 += ("; U=") + + to_string(int(mvControlled->RunningTraction.TractionVoltage + 0.5)); // OutText2+=AnsiString("; rvent=")+FloatToStrF(mvControlled->RventRot,ffFixed,6,2); - OutText2 += AnsiString("; R=") + - FloatToStrF(Controlled->MoverParameters->RunningShape.R, ffFixed, 4, 1); - OutText2 += AnsiString(" An=") + FloatToStrF(Controlled->MoverParameters->AccN, ffFixed, 4, - 2); // przyspieszenie poprzeczne + OutText2 += ("; R=") + + to_string(Controlled->MoverParameters->RunningShape.R, 1); + OutText2 += (" An=") + to_string(Controlled->MoverParameters->AccN, 2); // przyspieszenie poprzeczne if (tprev != int(GlobalTime->mr)) { tprev = GlobalTime->mr; Acc = (Controlled->MoverParameters->Vel - VelPrev) / 3.6; VelPrev = Controlled->MoverParameters->Vel; } - OutText2 += AnsiString("; As=") + FloatToStrF(Acc/*Controlled->MoverParameters->AccS*/, ffFixed, 4, - 2); // przyspieszenie wzd³u¿ne + OutText2 += ("; As=") + to_string(Acc/*Controlled->MoverParameters->AccS*/, 2); // przyspieszenie wzd³u¿ne // OutText2+=AnsiString("; P=")+FloatToStrF(mvControlled->EnginePower,ffFixed,6,1); - OutText3 += AnsiString("cyl.ham. ") + - FloatToStrF(Controlled->MoverParameters->BrakePress, ffFixed, 5, 2); - OutText3 += AnsiString("; prz.gl. ") + - FloatToStrF(Controlled->MoverParameters->PipePress, ffFixed, 5, 2); - OutText3 += AnsiString("; zb.gl. ") + - FloatToStrF(Controlled->MoverParameters->CompressedVolume, ffFixed, 6, 2); + OutText3 += ("cyl.ham. ") + + to_string(Controlled->MoverParameters->BrakePress, 2); + OutText3 += ("; prz.gl. ") + + to_string(Controlled->MoverParameters->PipePress, 2); + OutText3 += ("; zb.gl. ") + + to_string(Controlled->MoverParameters->CompressedVolume, 2); // youBy - drugi wezyk - OutText3 += AnsiString("; p.zas. ") + - FloatToStrF(Controlled->MoverParameters->ScndPipePress, ffFixed, 6, 2); + OutText3 += ("; p.zas. ") + + to_string(Controlled->MoverParameters->ScndPipePress, 2); if (Controlled->MoverParameters->EngineType == ElectricInductionMotor) { @@ -2329,30 +2325,30 @@ bool TWorld::Update() { glRasterPos2f(-0.25f, 0.16f - 0.01f * i); if (Controlled->MoverParameters->eimc[i] < 10) - OutText4 = FloatToStrF(Controlled->MoverParameters->eimc[i], ffFixed, 6, 3); + OutText4 = to_string(Controlled->MoverParameters->eimc[i], 3); else - OutText4 = FloatToStrF(Controlled->MoverParameters->eimc[i], ffGeneral, 5, 3); + OutText4 = to_string(Controlled->MoverParameters->eimc[i], 3); glPrint(OutText4.c_str()); } for (int i = 0; i <= 20; i++) { glRasterPos2f(-0.2f, 0.16f - 0.01f * i); if (Controlled->MoverParameters->eimv[i] < 10) - OutText4 = FloatToStrF(Controlled->MoverParameters->eimv[i], ffFixed, 6, 3); + OutText4 = to_string(Controlled->MoverParameters->eimv[i], 3); else - OutText4 = FloatToStrF(Controlled->MoverParameters->eimv[i], ffGeneral, 5, 3); + OutText4 = to_string(Controlled->MoverParameters->eimv[i], 3); glPrint(OutText4.c_str()); } for (int i = 0; i <= 10; i++) { glRasterPos2f(-0.15f, 0.16f - 0.01f * i); - OutText4 = FloatToStrF(Train->fPress[i][0], ffFixed, 6, 3); + OutText4 = to_string(Train->fPress[i][0], 3); glPrint(OutText4.c_str()); } for (int i = 0; i <= 8; i++) { glRasterPos2f(-0.15f, 0.04f - 0.01f * i); - OutText4 = FloatToStrF(Controlled->MED[0][i], ffFixed, 6, 3); + OutText4 = to_string(Controlled->MED[0][i], 3); glPrint(OutText4.c_str()); } for (int i = 0; i <= 8; i++) @@ -2360,7 +2356,7 @@ bool TWorld::Update() for (int j = 0; j <= 9; j++) { glRasterPos2f(0.05f + 0.03f * i, 0.16f - 0.01f * j); - OutText4 = FloatToStrF(Train->fEIMParams[i][j], ffGeneral, 4, 2); + OutText4 = to_string(Train->fEIMParams[i][j], 2); glPrint(OutText4.c_str()); } } @@ -2434,37 +2430,37 @@ bool TWorld::Update() // McZapkie: predkosc szlakowa if (Controlled->MoverParameters->RunningTrack.Velmax == -1) { - OutText3 += AnsiString(" Vtrack=Vmax"); + OutText3 += (" Vtrack=Vmax"); } else { OutText3 += - AnsiString(" Vtrack ") + - FloatToStrF(Controlled->MoverParameters->RunningTrack.Velmax, ffFixed, 8, 2); + (" Vtrack ") + + to_string(Controlled->MoverParameters->RunningTrack.Velmax, 2); } // WriteLog(Controlled->MoverParameters->TrainType.c_str()); if ((mvControlled->EnginePowerSource.SourceType == CurrentCollector) || (mvControlled->TrainType == dt_EZT)) { OutText3 += - AnsiString("; pant. ") + FloatToStrF(mvControlled->PantPress, ffFixed, 8, 2); + ("; pant. ") + to_string(mvControlled->PantPress, 2); OutText3 += (mvControlled->bPantKurek3 ? "=ZG" : "|ZG"); } // McZapkie: komenda i jej parametry - if (Controlled->MoverParameters->CommandIn.Command != AnsiString("")) - OutText4 = AnsiString("C:") + - AnsiString(Controlled->MoverParameters->CommandIn.Command) + - AnsiString(" V1=") + - FloatToStrF(Controlled->MoverParameters->CommandIn.Value1, ffFixed, 5, 0) + - AnsiString(" V2=") + - FloatToStrF(Controlled->MoverParameters->CommandIn.Value2, ffFixed, 5, 0); + if (Controlled->MoverParameters->CommandIn.Command != ("")) + OutText4 = ("C:") + + (Controlled->MoverParameters->CommandIn.Command) + + (" V1=") + + to_string(Controlled->MoverParameters->CommandIn.Value1, 0) + + (" V2=") + + to_string(Controlled->MoverParameters->CommandIn.Value2, 0); if (Controlled->Mechanik && (Controlled->Mechanik->AIControllFlag == AIdriver)) OutText4 += - AnsiString("AI: Vd=") + - FloatToStrF(Controlled->Mechanik->VelDesired, ffFixed, 4, 0) + AnsiString(" ad=") + - FloatToStrF(Controlled->Mechanik->AccDesired, ffFixed, 5, 2) + AnsiString(" Pd=") + - FloatToStrF(Controlled->Mechanik->ActualProximityDist, ffFixed, 4, 0) + - AnsiString(" Vn=") + FloatToStrF(Controlled->Mechanik->VelNext, ffFixed, 4, 0); + ("AI: Vd=") + + to_string(Controlled->Mechanik->VelDesired, 0) + (" ad=") + + to_string(Controlled->Mechanik->AccDesired, 2) + (" Pd=") + + to_string(Controlled->Mechanik->ActualProximityDist, 0) + + (" Vn=") + to_string(Controlled->Mechanik->VelNext, 0); } // ABu 150205: prosty help, zeby sie na forum nikt nie pytal, jak ma ruszyc :) @@ -2476,15 +2472,15 @@ bool TWorld::Update() { // informacja o wersji, sposobie wyœwietlania i b³êdach OpenGL // Global::iViewMode=VK_F9; OutText1 = Global::asVersion; // informacja o wersji - OutText2 = AnsiString("Rendering mode: ") + (Global::bUseVBO ? "VBO" : "Display Lists"); + OutText2 = string("Rendering mode: ") + (Global::bUseVBO ? "VBO" : "Display Lists"); if (Global::iMultiplayer) OutText2 += ". Multiplayer is active"; OutText2 += "."; GLenum err = glGetError(); if (err != GL_NO_ERROR) { - OutText3 = "OpenGL error " + AnsiString(err) + ": " + - Global::Bezogonkow(AnsiString((char *)gluErrorString(err))); + OutText3 = "OpenGL error " + to_string(err) + ": " + + Global::Bezogonkow(((char *)gluErrorString(err))); } } if (Global::iTextMode == VK_F3) @@ -2502,8 +2498,8 @@ bool TWorld::Update() glColor3f(1.0f, 1.0f, 1.0f); // a, damy bia³ym // glTranslatef(0.0f,0.0f,-0.50f); glRasterPos2f(-0.25f, 0.20f); - OutText1 = AnsiString(tmp->Mechanik->Relation().c_str()) + " (" + - tmp->Mechanik->Timetable()->TrainName.c_str() + ")"; + OutText1 = tmp->Mechanik->Relation() + " (" + + tmp->Mechanik->Timetable()->TrainName + ")"; glPrint(Global::Bezogonkow(OutText1, true).c_str()); glRasterPos2f(-0.25f, 0.19f); // glPrint("|============================|=======|=======|=====|"); @@ -2514,22 +2510,22 @@ bool TWorld::Update() for (int i = tmp->Mechanik->iStationStart; i <= tt->StationCount; ++i) { // wyœwietlenie pozycji z rozk³adu t = tt->TimeTable + i; // linijka rozk³adu - OutText1 = AnsiString(AnsiString(t->StationName.c_str()) + - " ").SubString(1, 26); + OutText1 = (t->StationName + + " ").substr(1, 26); OutText2 = (t->Ah >= 0) ? - AnsiString(int(100 + t->Ah)).SubString(2, 2) + ":" + - AnsiString(int(100 + t->Am)).SubString(2, 2) : - AnsiString(" "); + to_string(int(100 + t->Ah)).substr(2, 2) + ":" + + to_string(int(100 + t->Am)).substr(2, 2) : + string(" "); OutText3 = (t->Dh >= 0) ? - AnsiString(int(100 + t->Dh)).SubString(2, 2) + ":" + - AnsiString(int(100 + t->Dm)).SubString(2, 2) : - AnsiString(" "); - OutText4 = " " + FloatToStrF(t->vmax, ffFixed, 3, 0); - OutText4 = OutText4.SubString(OutText4.Length() - 2, + to_string(int(100 + t->Dh)).substr(2, 2) + ":" + + to_string(int(100 + t->Dm)).substr(2, 2) : + string(" "); + OutText4 = " " + to_string(t->vmax, 0); + OutText4 = OutText4.substr(OutText4.length() - 2, 3); // z wyrównaniem do prawej // if (AnsiString(t->StationWare).Pos("@")) OutText1 = "| " + OutText1 + " | " + OutText2 + " | " + OutText3 + - " | " + OutText4 + " | " + AnsiString(t->StationWare.c_str()); + " | " + OutText4 + " | " + t->StationWare; glRasterPos2f(-0.25f, 0.18f - 0.02f * (i - tmp->Mechanik->iStationStart)); if ((tmp->Mechanik->iStationStart < tt->StationIndex) ? @@ -2588,7 +2584,7 @@ bool TWorld::Update() glColor3f(1.0f, 1.0f, 0.0f); //¿ó³te for (int i = 0; i < 5; ++i) { // kilka linijek - if (Global::asTranscript[i].IsEmpty()) + if (Global::asTranscript[i].empty()) break; // dalej nie trzeba else { @@ -2820,28 +2816,28 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) int i = int(pRozkaz->cString[8]); // d³ugoœæ pierwszego ³añcucha (z przodu dwa floaty) CommLog( - AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " " + - AnsiString(pRozkaz->cString + 11 + i, (unsigned)(pRozkaz->cString[10 + i])) + + to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + + string(pRozkaz->cString + 11 + i, (unsigned)(pRozkaz->cString[10 + i])) + " rcvd"); TGroundNode *t = Ground.DynamicFind( - AnsiString(pRozkaz->cString + 11 + i, + string(pRozkaz->cString + 11 + i, (unsigned)pRozkaz->cString[10 + i])); // nazwa pojazdu jest druga if (t) if (t->DynamicObject->Mechanik) { - t->DynamicObject->Mechanik->PutCommand(AnsiString(pRozkaz->cString + 9, i), + t->DynamicObject->Mechanik->PutCommand(string(pRozkaz->cString + 9, i), pRozkaz->fPar[0], pRozkaz->fPar[1], NULL, stopExt); // floaty s¹ z przodu - WriteLog("AI command: " + AnsiString(pRozkaz->cString + 9, i)); + WriteLog("AI command: " + string(pRozkaz->cString + 9, i)); } } break; case 4: // badanie zajêtoœci toru { - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " " + - AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + + string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); TGroundNode *t = Ground.FindGroundNode( - AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])), TP_TRACK); + string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])), TP_TRACK); if (t) if (t->pTrack->IsEmpty()) Ground.WyslijWolny(t->asName); @@ -2849,8 +2845,8 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) break; case 5: // ustawienie parametrów { - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " params " + - IntToStr(*pRozkaz->iPar) + " rcvd"); + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " params " + + to_string(*pRozkaz->iPar) + " rcvd"); if (*pRozkaz->iPar == 0) // sprawdzenie czasu if (*pRozkaz->iPar & 1) // ustawienie czasu { @@ -2874,8 +2870,8 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) case 6: // pobranie parametrów ruchu pojazdu if (Global::iMultiplayer) { // Ra 2014-12: to ma dzia³aæ równie¿ dla pojazdów bez obsady - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " " + - AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + + string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); if (pRozkaz->cString[0]) // jeœli d³ugoœæ nazwy jest niezerowa { // szukamy pierwszego pojazdu o takiej nazwie i odsy³amy parametry ramk¹ #7 @@ -2884,7 +2880,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) t = Ground.DynamicFind( Global::asHumanCtrlVehicle); // nazwa pojazdu u¿ytkownika else - t = Ground.DynamicFindAny(AnsiString( + t = Ground.DynamicFindAny(string( pRozkaz->cString + 1, (unsigned)pRozkaz->cString[0])); // nazwa pojazdu if (t) Ground.WyslijNamiary(t); // wys³anie informacji o pojeŸdzie @@ -2897,31 +2893,31 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) } break; case 8: // ponowne wys³anie informacji o zajêtych odcinkach toru - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " all busy track" + " rcvd"); + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " all busy track" + " rcvd"); Ground.TrackBusyList(); break; case 9: // ponowne wys³anie informacji o zajêtych odcinkach izolowanych - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " all busy isolated" + " rcvd"); + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " all busy isolated" + " rcvd"); Ground.IsolatedBusyList(); break; case 10: // badanie zajêtoœci jednego odcinka izolowanego - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " " + - AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); - Ground.IsolatedBusy(AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0]))); + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + + string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); + Ground.IsolatedBusy(string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0]))); break; case 11: // ustawienie parametrów ruchu pojazdu // Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0]))); break; case 12: // skrocona ramka parametrow pojazdow AI (wszystkich!!) - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " obsadzone" + " rcvd"); + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " obsadzone" + " rcvd"); Ground.WyslijObsadzone(); // Ground.IsolatedBusy(AnsiString(pRozkaz->cString+1,(unsigned)(pRozkaz->cString[0]))); break; case 13: // ramka uszkodzenia i innych stanow pojazdu, np. wylaczenie CA, wlaczenie recznego itd. // WriteLog("Przyszlo 13!"); // WriteLog(pRozkaz->cString); - CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " " + - AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + + CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " + + string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd"); if (pRozkaz->cString[1]) // jeœli d³ugoœæ nazwy jest niezerowa { // szukamy pierwszego pojazdu o takiej nazwie i odsy³amy parametry ramk¹ #13 @@ -2931,7 +2927,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz) Global::asHumanCtrlVehicle); // nazwa pojazdu u¿ytkownika else t = Ground.DynamicFindAny( - AnsiString(pRozkaz->cString + 2, + string(pRozkaz->cString + 2, (unsigned)pRozkaz->cString[1])); // nazwa pojazdu if (t) { diff --git a/World.h b/World.h index c9ca570a..b80b1226 100644 --- a/World.h +++ b/World.h @@ -41,10 +41,10 @@ class TWorld ~TWorld(); // double Aspect; private: - AnsiString OutText1; // teksty na ekranie - AnsiString OutText2; - AnsiString OutText3; - AnsiString OutText4; + string OutText1; // teksty na ekranie + string OutText2; + string OutText3; + string OutText4; void ShowHints(); bool Render(); TCamera Camera; diff --git a/usefull.h b/usefull.h index 87c2d87f..9845f42a 100644 --- a/usefull.h +++ b/usefull.h @@ -23,6 +23,8 @@ http://mozilla.org/MPL/2.0/. // Ra: "delete NULL" nic nie zrobi, wiêc "if (a!=NULL)" jest zbêdne //#define SafeFree(a) if (a!=NULL) free(a) +//#define M_PI = 3.141592653589793 + #define SafeDelete(a) \ { \ delete (a); \