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

removed dependencies on the old parser. The code can now be compiled outside of Borland C++

This commit is contained in:
tmj-fstate
2017-01-15 15:04:17 +01:00
parent 7df7c8b76e
commit 15cf3d73a8
87 changed files with 3395 additions and 3232 deletions

183
World.cpp
View File

@@ -12,26 +12,25 @@ http://mozilla.org/MPL/2.0/.
*/
#include "system.hpp"
#include "classes.hpp"
#include "stdafx.h"
#include "World.h"
#include "opengl/glew.h"
#include "opengl/glut.h"
#pragma hdrstop
#include "Globals.h"
#include "Logs.h"
#include "MdlMngr.h"
#include "Texture.h"
#include "Timer.h"
#include "mtable.h"
#include "Sound.h"
#include "World.h"
#include "Logs.h"
#include "Globals.h"
#include "Camera.h"
#include "ResourceManager.h"
#include "Event.h"
#include "Train.h"
#include "Driver.h"
#include "Console.h"
#include <cmath>
#define TEXTURE_FILTER_CONTROL_EXT 0x8500
#define TEXTURE_LOD_BIAS_EXT 0x8501
@@ -44,8 +43,6 @@ HINSTANCE hinstGLUT32 = NULL; // wska
// GLUTAPI void APIENTRY glutBitmapCharacterDLL(void *font, int character);
TDynamicObject *Controlled = NULL; // pojazd, który prowadzimy
using namespace Timer;
const double fTimeMax = 1.00; //[s] maksymalny czas aktualizacji w jednek klatce
TWorld::TWorld()
@@ -170,16 +167,16 @@ BOOL GetDisplayMonitorInfo(int nDeviceIndex, LPSTR lpszMonitorInfo)
bool TWorld::Init(HWND NhWnd, HDC hDC)
{
double time = (double)Now();
auto timestart = std::chrono::system_clock::now();
Global::hWnd = NhWnd; // do WM_COPYDATA
Global::pCamera = &Camera; // Ra: wskaŸnik potrzebny do likwidacji drgañ
Global::detonatoryOK = true;
WriteLog("Starting MaSzyna rail vehicle simulator.");
WriteLog(Global::asVersion);
#if sizeof(TSubModel) != 256
Error("Wrong sizeof(TSubModel) is " + AnsiString(sizeof(TSubModel)));
return false;
#endif
if( sizeof( TSubModel ) != 256 ) {
Error( "Wrong sizeof(TSubModel) is " + std::to_string(sizeof( TSubModel )) );
return false;
}
WriteLog("Online documentation and additional files on http://eu07.pl");
WriteLog("Authors: Marcin_EU, McZapkie, ABu, Winger, Tolaris, nbmx, OLO_EU, Bart, Quark-t, "
"ShaXbee, Oli_EU, youBy, KURS90, Ra, hunter, szociu, Stele, Q, firleju and others");
@@ -188,7 +185,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC)
WriteLog("Vendor:");
// Winger030405: sprawdzanie sterownikow
WriteLog((char *)glGetString(GL_VENDOR));
AnsiString glver = ((char *)glGetString(GL_VERSION));
std::string glver = ((char *)glGetString(GL_VERSION));
WriteLog("OpenGL Version:");
WriteLog(glver);
if ((glver == "1.5.1") || (glver == "1.5.2"))
@@ -201,12 +198,13 @@ bool TWorld::Init(HWND NhWnd, HDC hDC)
else
Global::detonatoryOK = true;
// Ra: umieszczone w EU07.cpp jakoœ nie chce dzia³aæ
while (glver.LastDelimiter(".") > glver.Pos("."))
glver = glver.SubString(1, glver.LastDelimiter(".") - 1); // obciêcie od drugiej kropki
while( glver.rfind( '.' ) > glver.find( '.' ) ) {
glver = glver.substr( 0, glver.rfind( '.' ) - 1 ); // obciêcie od drugiej kropki
}
double ogl;
try
{
ogl = glver.ToDouble();
ogl = std::stod( glver );
}
catch (...)
{
@@ -224,10 +222,9 @@ bool TWorld::Init(HWND NhWnd, HDC hDC)
WriteLog("Supported extensions:");
WriteLog((char *)glGetString(GL_EXTENSIONS));
if (glewGetExtension("GL_ARB_vertex_buffer_object")) // czy jest VBO w karcie graficznej
if (GL_ARB_vertex_buffer_object) // czy jest VBO w karcie graficznej
{
if (AnsiString((char *)glGetString(GL_VENDOR))
.Pos("Intel")) // wymuszenie tylko dla kart Intel
if( std::string( (char *)glGetString(GL_VENDOR) ).find("Intel") != std::string::npos ) // wymuszenie tylko dla kart Intel
{ // karty Intel nie nadaj¹ siê do grafiki 3D, ale robimy wyj¹tek, bo to w koñcu symulator
Global::iMultisampling =
0; // to robi problemy na "Intel(R) HD Graphics Family" - czarny ekran
@@ -251,20 +248,20 @@ bool TWorld::Init(HWND NhWnd, HDC hDC)
else
{
Global::bDecompressDDS =
!glewGetExtension("GL_EXT_texture_compression_s3tc"); // czy obs³ugiwane?
!(GL_EXT_texture_compression_s3tc); // czy obs³ugiwane?
if (Global::bDecompressDDS) // czy jest obs³uga DDS w karcie graficznej
WriteLog("DDS textures are not supported.");
else // brak obs³ugi DDS - trzeba w³¹czyæ programow¹ dekompresjê
WriteLog("DDS textures are supported.");
}
if (Global::iMultisampling)
WriteLog("Used multisampling of " + AnsiString(Global::iMultisampling) + " samples.");
WriteLog("Used multisampling of " + std::to_string(Global::iMultisampling) + " samples.");
{ // ograniczenie maksymalnego rozmiaru tekstur - parametr dla skalowania tekstur
GLint i;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &i);
if (i < Global::iMaxTextureSize)
Global::iMaxTextureSize = i;
WriteLog("Max texture size: " + AnsiString(Global::iMaxTextureSize));
WriteLog("Max texture size: " + std::to_string(Global::iMaxTextureSize));
}
/*-----------------------Render Initialization----------------------*/
if (Global::fOpenGL >= 1.2) // poni¿sze nie dzia³a w 1.1
@@ -566,7 +563,7 @@ bool TWorld::Init(HWND NhWnd, HDC hDC)
}
SwapBuffers(hDC); // Swap Buffers (Double Buffering)
Ground.Init(Global::szSceneryFile, hDC);
Ground.Init(Global::SceneryFile, hDC);
// Global::tSinceStart= 0;
Clouds.Init();
WriteLog("Ground init OK");
@@ -670,9 +667,8 @@ bool TWorld::Init(HWND NhWnd, HDC hDC)
else
light = TTexturesManager::GetTextureID(szTexturePath, szSceneryPath, "smuga2.tga");
// Camera.Reset();
ResetTimers();
WriteLog("Load time: " + FloatToStrF((86400.0 * ((double)Now() - time)), ffFixed, 7, 1) +
" seconds");
Timer::ResetTimers();
WriteLog( "Load time: " + std::to_string( ( std::chrono::system_clock::now() - timestart ).count() ) + " seconds");
if (DebugModeFlag) // w Debugmode automatyczne w³¹czenie AI
if (Train)
if (Train->Dynamic()->Mechanik)
@@ -689,7 +685,7 @@ void TWorld::OnKeyDown(int cKey)
// przekodowania
if (!Global::iPause)
{ // podczas pauzy klawisze nie dzia³aj¹
AnsiString info = "Key pressed: [";
std::string info = "Key pressed: [";
if (Console::Pressed(VK_SHIFT))
info += "Shift]+[";
if (Console::Pressed(VK_CONTROL))
@@ -697,19 +693,19 @@ void TWorld::OnKeyDown(int cKey)
if (cKey > 192) // coœ tam jeszcze ciekawego jest?
{
if (cKey < 255) // 255 to [Fn] w laptopach
WriteLog(info + AnsiString(char(cKey - 128)) + "]");
WriteLog(info + (char)(cKey - 128) + "]");
}
else if (cKey >= 186)
WriteLog(info + AnsiString(";=,-./~").SubString(cKey - 185, 1) + "]");
WriteLog(info + std::string(";=,-./~").substr(cKey - 186, 1) + "]");
else if (cKey > 123) // coœ tam jeszcze ciekawego jest?
WriteLog(info + AnsiString(cKey) + "]"); // numer klawisza
WriteLog(info + std::to_string(cKey) + "]"); // numer klawisza
else if (cKey >= 112) // funkcyjne
WriteLog(info + "F" + AnsiString(cKey - 111) + "]");
WriteLog(info + "F" + std::to_string(cKey - 111) + "]");
else if (cKey >= 96)
WriteLog(info + "Num" + AnsiString("0123456789*+?-./").SubString(cKey - 95, 1) + "]");
WriteLog(info + "Num" + std::string("0123456789*+?-./").substr(cKey - 96, 1) + "]");
else if (((cKey >= '0') && (cKey <= '9')) || ((cKey >= 'A') && (cKey <= 'Z')) ||
(cKey == ' '))
WriteLog(info + AnsiString(char(cKey)) + "]");
WriteLog(info + (char)(cKey) + "]");
else if (cKey == '-')
WriteLog(info + "Insert]");
else if (cKey == '.')
@@ -719,7 +715,7 @@ void TWorld::OnKeyDown(int cKey)
else if (cKey == '#')
WriteLog(info + "End]");
else if (cKey > 'Z') //¿eby nie logowaæ kursorów
WriteLog(info + AnsiString(cKey) + "]"); // numer klawisza
WriteLog(info + std::to_string(cKey) + "]"); // numer klawisza
}
if ((cKey <= '9') ? (cKey >= '0') : false) // klawisze cyfrowe
{
@@ -744,15 +740,15 @@ void TWorld::OnKeyDown(int cKey)
Global::pFreeCameraInitAngle[i].z = Camera.Roll;
// logowanie, ¿eby mo¿na by³o do scenerii przepisaæ
WriteLog(
"camera " + FloatToStrF(Global::pFreeCameraInit[i].x, ffFixed, 7, 3) + " " +
FloatToStrF(Global::pFreeCameraInit[i].y, ffFixed, 7, 3) + " " +
FloatToStrF(Global::pFreeCameraInit[i].z, ffFixed, 7, 3) + " " +
FloatToStrF(RadToDeg(Global::pFreeCameraInitAngle[i].x), ffFixed, 7, 3) +
"camera " + std::to_string( Global::pFreeCameraInit[i].x ) + " " +
std::to_string(Global::pFreeCameraInit[i].y ) + " " +
std::to_string(Global::pFreeCameraInit[i].z ) + " " +
std::to_string(RadToDeg(Global::pFreeCameraInitAngle[i].x)) +
" " +
FloatToStrF(RadToDeg(Global::pFreeCameraInitAngle[i].y), ffFixed, 7, 3) +
std::to_string(RadToDeg(Global::pFreeCameraInitAngle[i].y)) +
" " +
FloatToStrF(RadToDeg(Global::pFreeCameraInitAngle[i].z), ffFixed, 7, 3) +
" " + AnsiString(i) + " endcamera");
std::to_string(RadToDeg(Global::pFreeCameraInitAngle[i].z)) +
" " + std::to_string(i) + " endcamera");
}
else // równie¿ przeskakiwanie
{ // Ra: to z t¹ kamer¹ (Camera.Pos i Global::pCameraPosition) jest trochê bez sensu
@@ -1106,29 +1102,29 @@ bool TWorld::Update()
--iCheckFPS;
else
{ // jak dosz³o do zera, to sprawdzamy wydajnoœæ
if (GetFPS() < Global::fFpsMin)
if (Timer::GetFPS() < Global::fFpsMin)
{
Global::iSegmentsRendered -=
random(10); // floor(0.5+Global::iSegmentsRendered/Global::fRadiusFactor);
Random(10); // floor(0.5+Global::iSegmentsRendered/Global::fRadiusFactor);
if (Global::iSegmentsRendered < 10) // jeœli jest co zmniejszaæ
Global::iSegmentsRendered = 10; // 10=minimalny promieñ to 600m
}
else if (GetFPS() > Global::fFpsMax) // jeœli jest du¿o FPS
else if (Timer::GetFPS() > Global::fFpsMax) // jeœli jest du¿o FPS
if (Global::iSegmentsRendered < Global::iFpsRadiusMax) // jeœli jest co zwiêkszaæ
{
Global::iSegmentsRendered +=
random(5); // floor(0.5+Global::iSegmentsRendered*Global::fRadiusFactor);
Random(5); // floor(0.5+Global::iSegmentsRendered*Global::fRadiusFactor);
if (Global::iSegmentsRendered > Global::iFpsRadiusMax) // 5.6km (22*22*M_PI)
Global::iSegmentsRendered = Global::iFpsRadiusMax;
}
if ((GetFPS() < 12) && (Global::iSlowMotion < 7))
if ((Timer::GetFPS() < 12) && (Global::iSlowMotion < 7))
{
Global::iSlowMotion = (Global::iSlowMotion << 1) + 1; // zapalenie kolejnego bitu
if (Global::iSlowMotionMask & 1)
if (Global::iMultisampling) // a multisampling jest w³¹czony
glDisable(GL_MULTISAMPLE); // wy³¹czenie multisamplingu powinno poprawiæ FPS
}
else if ((GetFPS() > 20) && Global::iSlowMotion)
else if ((Timer::GetFPS() > 20) && Global::iSlowMotion)
{ // FPS siê zwiêkszy³, mo¿na w³¹czyæ bajery
Global::iSlowMotion = (Global::iSlowMotion >> 1); // zgaszenie bitu
if (Global::iSlowMotion == 0) // jeœli jest pe³na prêdkoœæ
@@ -1151,12 +1147,12 @@ bool TWorld::Update()
WriteLog("Phisics step switched to 0.01s!");
}
*/
iCheckFPS = 0.25 * GetFPS(); // tak za 0.25 sekundy sprawdziæ ponownie (jeszcze przycina?)
iCheckFPS = 0.25 * Timer::GetFPS(); // tak za 0.25 sekundy sprawdziæ ponownie (jeszcze przycina?)
}
UpdateTimers(Global::iPause);
Timer::UpdateTimers(Global::iPause);
if (!Global::iPause)
{ // jak pauza, to nie ma po co tego przeliczaæ
GlobalTime->UpdateMTableTime(GetDeltaTime()); // McZapkie-300302: czas rozkladowy
GlobalTime->UpdateMTableTime(Timer::GetDeltaTime()); // McZapkie-300302: czas rozkladowy
// Ra 2014-07: przeliczenie k¹ta czasu (do animacji zale¿nych od czasu)
Global::fTimeAngleDeg =
GlobalTime->hh * 15.0 + GlobalTime->mm * 0.25 + GlobalTime->mr / 240.0;
@@ -1300,18 +1296,18 @@ bool TWorld::Update()
FollowView(false); // bez wyciszania dŸwiêków
else if (Global::iTextMode == -1)
{ // tu mozna dodac dopisywanie do logu przebiegu lokomotywy
WriteLog("Number of textures used: " + AnsiString(Global::iTextures));
WriteLog("Number of textures used: " + std::to_string(Global::iTextures));
return false;
}
Camera.Update(); // uwzglêdnienie ruchu wywo³anego klawiszami
} // koniec bloku pomijanego przy nieaktywnym oknie
// poprzednie jakoœ tam dzia³a³o
double dt = GetDeltaRenderTime(); // nie uwzglêdnia pauzowania ani mno¿enia czasu
double dt = Timer::GetDeltaRenderTime(); // nie uwzglêdnia pauzowania ani mno¿enia czasu
fTime50Hz +=
dt; // w pauzie te¿ trzeba zliczaæ czas, bo przy du¿ym FPS bêdzie problem z odczytem ramek
if (fTime50Hz >= 0.2)
Console::Update(); // to i tak trzeba wywo³ywaæ
dt = GetDeltaTime(); // 0.0 gdy pauza
dt = Timer::GetDeltaTime(); // 0.0 gdy pauza
fTimeBuffer += dt; //[s] dodanie czasu od poprzedniej ramki
if (fTimeBuffer >= fMaxDt) // jest co najmniej jeden krok; normalnie 0.01s
{ // Ra: czas dla fizyki jest skwantowany - fizykê lepiej przeliczaæ sta³ym krokiem
@@ -1369,7 +1365,7 @@ bool TWorld::Update()
Ground.Update(dt, n);
Ground.Update(dt, n); // 5 razy
}
dt = GetDeltaTime(); // czas niekwantowany
dt = Timer::GetDeltaTime(); // czas niekwantowany
if (Camera.Type == tp_Follow)
{
if (Train)
@@ -1715,10 +1711,10 @@ bool TWorld::Update()
if (DebugModeFlag && !Global::iTextMode)
{
OutText1 = " FPS: ";
OutText1 += to_string(GetFPS(), 2);
OutText1 += to_string(Timer::GetFPS(), 2);
OutText1 += Global::iSlowMotion ? "s" : "n";
OutText1 += (GetDeltaTime() >= 0.2) ? "!" : " ";
OutText1 += (Timer::GetDeltaTime() >= 0.2) ? "!" : " ";
// if (GetDeltaTime()>=0.2) //Ra: to za bardzo miota tekstem!
// {
// OutText1+= " Slowing Down !!! ";
@@ -1733,7 +1729,7 @@ bool TWorld::Update()
{
Global::iViewMode = VK_F8;
OutText1 = " FPS: ";
OutText1 += to_string(GetFPS(), 2);
OutText1 += to_string(Timer::GetFPS(), 2);
//OutText1 += sprintf();
if (Global::iSlowMotion)
OutText1 += " (slowmotion " + to_string(Global::iSlowMotion) + ")";
@@ -1868,7 +1864,7 @@ bool TWorld::Update()
if (Controlled)
SetWindowText(hWnd, Controlled->MoverParameters->Name.c_str());
else
SetWindowText(hWnd, Global::szSceneryFile); // nazwa scenerii
SetWindowText(hWnd, Global::SceneryFile.c_str()); // nazwa scenerii
glBindTexture(GL_TEXTURE_2D, 0);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glLoadIdentity();
@@ -1908,9 +1904,9 @@ bool TWorld::Update()
}
else if (Global::iTextMode == VK_F12)
{ // opcje w³¹czenia i wy³¹czenia logowania
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)");
OutText1 = "[0] Debugmode " + std::string(DebugModeFlag ? "(on)" : "(off)");
OutText2 = "[1] log.txt " + std::string((Global::iWriteLogEnabled & 1) ? "(on)" : "(off)");
OutText3 = "[2] Console " + std::string((Global::iWriteLogEnabled & 2) ? "(on)" : "(off)");
}
else if (Global::iTextMode == VK_F2)
{ // ABu: info dla najblizszego pojazdu!
@@ -2109,12 +2105,12 @@ bool TWorld::Update()
"C0=" + (tmp->PrevConnected ?
tmp->PrevConnected->GetName() + ":" +
to_string(tmp->MoverParameters->Couplers[0].CouplingFlag) :
string("NULL"));
std::string("NULL"));
OutText4 +=
" C1=" + (tmp->NextConnected ?
tmp->NextConnected->GetName() + ":" +
to_string(tmp->MoverParameters->Couplers[1].CouplingFlag) :
string("NULL"));
std::string("NULL"));
if (Console::Pressed(VK_F2))
{
WriteLog(OutText1);
@@ -2185,7 +2181,7 @@ bool TWorld::Update()
to_string(180.0 - RadToDeg(Camera.Yaw), 0); // ma byæ azymut, czyli 0 na pó³nocy i roœnie na wschód
OutText1 +=
" " +
string("S SEE NEN NWW SW")
std::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):
@@ -2472,7 +2468,7 @@ bool TWorld::Update()
{ // informacja o wersji, sposobie wyœwietlania i b³êdach OpenGL
// Global::iViewMode=VK_F9;
OutText1 = Global::asVersion; // informacja o wersji
OutText2 = string("Rendering mode: ") + (Global::bUseVBO ? "VBO" : "Display Lists");
OutText2 = std::string("Rendering mode: ") + (Global::bUseVBO ? "VBO" : "Display Lists");
if (Global::iMultiplayer)
OutText2 += ". Multiplayer is active";
OutText2 += ".";
@@ -2515,11 +2511,11 @@ bool TWorld::Update()
OutText2 = (t->Ah >= 0) ?
to_string(int(100 + t->Ah)).substr(1, 2) + ":" +
to_string(int(100 + t->Am)).substr(1, 2) :
string(" ");
std::string(" ");
OutText3 = (t->Dh >= 0) ?
to_string(int(100 + t->Dh)).substr(1, 2) + ":" +
to_string(int(100 + t->Dm)).substr(1, 2) :
string(" ");
std::string(" ");
OutText4 = " " + to_string(t->vmax, 0);
OutText4 = OutText4.substr(OutText4.length() - 3,
3); // z wyrównaniem do prawej
@@ -2789,20 +2785,20 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
switch (pRozkaz->iComm)
{
case 0: // odes³anie identyfikatora wersji
CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " version" + " rcvd");
CommLog( Now() + " " + std::to_string(pRozkaz->iComm) + " version" + " rcvd");
Ground.WyslijString(Global::asVersion, 0); // przedsatwienie siê
break;
case 1: // odes³anie identyfikatora wersji
CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " scenery" + " rcvd");
Ground.WyslijString(Global::szSceneryFile, 1); // nazwa scenerii
CommLog( Now() + " " + std::to_string(pRozkaz->iComm) + " scenery" + " rcvd");
Ground.WyslijString(Global::SceneryFile, 1); // nazwa scenerii
break;
case 2: // event
CommLog(AnsiString(Now()) + " " + IntToStr(pRozkaz->iComm) + " " +
AnsiString(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd");
CommLog( Now() + " " + std::to_string(pRozkaz->iComm) + " " +
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd");
if (Global::iMultiplayer)
{ // WriteLog("Komunikat: "+AnsiString(pRozkaz->Name1));
TEvent *e = Ground.FindEvent(
string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])));
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])));
if (e)
if ((e->Type == tp_Multiple) || (e->Type == tp_Lights) ||
bool(e->evJoined)) // tylko jawne albo niejawne Multiple
@@ -2817,27 +2813,27 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
int(pRozkaz->cString[8]); // d³ugoœæ pierwszego ³añcucha (z przodu dwa floaty)
CommLog(
to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " +
string(pRozkaz->cString + 11 + i, (unsigned)(pRozkaz->cString[10 + i])) +
std::string(pRozkaz->cString + 11 + i, (unsigned)(pRozkaz->cString[10 + i])) +
" rcvd");
TGroundNode *t = Ground.DynamicFind(
string(pRozkaz->cString + 11 + i,
std::string(pRozkaz->cString + 11 + i,
(unsigned)pRozkaz->cString[10 + i])); // nazwa pojazdu jest druga
if (t)
if (t->DynamicObject->Mechanik)
{
t->DynamicObject->Mechanik->PutCommand(string(pRozkaz->cString + 9, i),
t->DynamicObject->Mechanik->PutCommand(std::string(pRozkaz->cString + 9, i),
pRozkaz->fPar[0], pRozkaz->fPar[1],
NULL, stopExt); // floaty s¹ z przodu
WriteLog("AI command: " + string(pRozkaz->cString + 9, i));
WriteLog("AI command: " + std::string(pRozkaz->cString + 9, i));
}
}
break;
case 4: // badanie zajêtoœci toru
{
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " +
string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd");
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd");
TGroundNode *t = Ground.FindGroundNode(
string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])), TP_TRACK);
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])), TP_TRACK);
if (t)
if (t->pTrack->IsEmpty())
Ground.WyslijWolny(t->asName);
@@ -2871,7 +2867,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
if (Global::iMultiplayer)
{ // Ra 2014-12: to ma dzia³aæ równie¿ dla pojazdów bez obsady
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " +
string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) +
std::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
@@ -2880,7 +2876,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
t = Ground.DynamicFind(
Global::asHumanCtrlVehicle); // nazwa pojazdu u¿ytkownika
else
t = Ground.DynamicFindAny(string(
t = Ground.DynamicFindAny(std::string(
pRozkaz->cString + 1, (unsigned)pRozkaz->cString[0])); // nazwa pojazdu
if (t)
Ground.WyslijNamiary(t); // wys³anie informacji o pojeŸdzie
@@ -2902,8 +2898,8 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
break;
case 10: // badanie zajêtoœci jednego odcinka izolowanego
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])));
std::string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) + " rcvd");
Ground.IsolatedBusy(std::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])));
@@ -2917,7 +2913,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
// WriteLog("Przyszlo 13!");
// WriteLog(pRozkaz->cString);
CommLog(to_string(BorlandTime()) + " " + to_string(pRozkaz->iComm) + " " +
string(pRozkaz->cString + 1, (unsigned)(pRozkaz->cString[0])) +
std::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
@@ -2927,7 +2923,7 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
Global::asHumanCtrlVehicle); // nazwa pojazdu u¿ytkownika
else
t = Ground.DynamicFindAny(
string(pRozkaz->cString + 2,
std::string(pRozkaz->cString + 2,
(unsigned)pRozkaz->cString[1])); // nazwa pojazdu
if (t)
{
@@ -2952,9 +2948,10 @@ void TWorld::OnCommandGet(DaneRozkaz *pRozkaz)
};
//---------------------------------------------------------------------------
void TWorld::ModifyTGA(const AnsiString &dir)
void TWorld::ModifyTGA(const std::string &dir)
{ // rekurencyjna modyfikacje plików TGA
TSearchRec sr;
/* TODO: implement version without Borland stuff
TSearchRec sr;
if (FindFirst(dir + "*.*", faDirectory | faArchive, sr) == 0)
{
do
@@ -2967,12 +2964,15 @@ void TWorld::ModifyTGA(const AnsiString &dir)
} while (FindNext(sr) == 0);
FindClose(sr);
}
*/
};
//---------------------------------------------------------------------------
AnsiString last; // zmienne u¿ywane w rekurencji
std::string last; // zmienne u¿ywane w rekurencji
double shift = 0;
void TWorld::CreateE3D(const AnsiString &dir, bool dyn)
void TWorld::CreateE3D(std::string const &dir, bool dyn)
{ // rekurencyjna generowanie plików E3D
/* TODO: remove Borland file access stuff
TTrack *trk;
double at;
TSearchRec sr;
@@ -3061,6 +3061,7 @@ void TWorld::CreateE3D(const AnsiString &dir, bool dyn)
} while (FindNext(sr) == 0);
FindClose(sr);
}
*/
};
//---------------------------------------------------------------------------
void TWorld::CabChange(TDynamicObject *old, TDynamicObject *now)