merged parser replacement changes. The branch should be now compilable outside of Borland environment.

This commit is contained in:
tmj-fstate
2017-01-16 15:15:25 +01:00
89 changed files with 14697 additions and 6556 deletions

View File

@@ -13,18 +13,17 @@ http://mozilla.org/MPL/2.0/.
*/
#include "system.hpp"
#include "classes.hpp"
#include "stdafx.h"
#include "Ground.h"
#include "opengl/glew.h"
#include "opengl/glut.h"
#pragma hdrstop
#include "Globals.h"
#include "Logs.h"
#include "usefull.h"
#include "Timer.h"
#include "Texture.h"
#include "Ground.h"
#include "Globals.h"
#include "Event.h"
#include "EvLaunch.h"
#include "TractionPower.h"
@@ -1412,7 +1411,7 @@ TGroundNode *nTrainSetNode = NULL; // poprzedni pojazd do
TGroundNode *nTrainSetDriver = NULL; // pojazd, któremu zostanie wys³any rozk³ad
TGroundVertex TempVerts[10000]; // tu wczytywane s¹ trójk¹ty
Byte TempConnectionType[200]; // Ra: sprzêgi w sk³adzie; ujemne, gdy odwrotnie
BYTE TempConnectionType[200]; // Ra: sprzêgi w sk³adzie; ujemne, gdy odwrotnie
void TGround::RaTriangleDivider(TGroundNode *node)
{ // tworzy dodatkowe trójk¹ty i zmiejsza podany
@@ -1505,9 +1504,9 @@ void TGround::RaTriangleDivider(TGroundNode *node)
ntri->Vertices[1] = node->Vertices[1]; // wierzcho³ek B przechodzi do nowego
// node->Vertices[1].HalfSet(node->Vertices[0],node->Vertices[1]); //na razie D tak
if (divide & 4)
node->Vertices[1].SetByZ(node->Vertices[0], node->Vertices[1], divide & 8 ? z1 : z0);
node->Vertices[1].SetByZ(node->Vertices[0], node->Vertices[1], (divide & 8) ? z1 : z0);
else
node->Vertices[1].SetByX(node->Vertices[0], node->Vertices[1], divide & 8 ? x1 : x0);
node->Vertices[1].SetByX(node->Vertices[0], node->Vertices[1], (divide & 8) ? x1 : x0);
ntri->Vertices[0] = node->Vertices[1]; // wierzcho³ek D jest wspólny
break;
case 1: // podzia³ BC (1-2) -> ABD i ADC
@@ -1515,9 +1514,9 @@ void TGround::RaTriangleDivider(TGroundNode *node)
ntri->Vertices[2] = node->Vertices[2]; // wierzcho³ek C przechodzi do nowego
// node->Vertices[2].HalfSet(node->Vertices[1],node->Vertices[2]); //na razie D tak
if (divide & 4)
node->Vertices[2].SetByZ(node->Vertices[1], node->Vertices[2], divide & 8 ? z1 : z0);
node->Vertices[2].SetByZ(node->Vertices[1], node->Vertices[2], (divide & 8) ? z1 : z0);
else
node->Vertices[2].SetByX(node->Vertices[1], node->Vertices[2], divide & 8 ? x1 : x0);
node->Vertices[2].SetByX(node->Vertices[1], node->Vertices[2], (divide & 8) ? x1 : x0);
ntri->Vertices[1] = node->Vertices[2]; // wierzcho³ek D jest wspólny
break;
case 2: // podzia³ CA (2-0) -> ABD i DBC
@@ -1525,9 +1524,9 @@ void TGround::RaTriangleDivider(TGroundNode *node)
ntri->Vertices[2] = node->Vertices[2]; // wierzcho³ek C przechodzi do nowego
// node->Vertices[2].HalfSet(node->Vertices[2],node->Vertices[0]); //na razie D tak
if (divide & 4)
node->Vertices[2].SetByZ(node->Vertices[2], node->Vertices[0], divide & 8 ? z1 : z0);
node->Vertices[2].SetByZ(node->Vertices[2], node->Vertices[0], (divide & 8) ? z1 : z0);
else
node->Vertices[2].SetByX(node->Vertices[2], node->Vertices[0], divide & 8 ? x1 : x0);
node->Vertices[2].SetByX(node->Vertices[2], node->Vertices[0], (divide & 8) ? x1 : x0);
ntri->Vertices[0] = node->Vertices[2]; // wierzcho³ek D jest wspólny
break;
}
@@ -2270,11 +2269,10 @@ void TGround::FirstInit()
srGlobal.NodeAdd(Current); // dodanie do globalnego obiektu
else if (i == TP_TERRAIN)
{ // specjalne przetwarzanie terenu wczytanego z pliku E3D
string xxxzzz; // nazwa kwadratu
TGroundRect *gr;
for (j = 1; j < Current->iCount; ++j)
{ // od 1 do koñca s¹ zestawy trójk¹tów
xxxzzz = string(Current->nNode[j].smTerrain->pName); // pobranie nazwy
std::string xxxzzz = Current->nNode[j].smTerrain->pName; // pobranie nazwy
gr = GetRect(1000 * (stol_def(xxxzzz.substr(0, 3),0) - 500),
1000 * (stol_def(xxxzzz.substr(3, 3),0) - 500));
if (Global::bUseVBO)
@@ -2834,7 +2832,7 @@ bool TGround::Init(std::string asFile, HDC hDC)
}
else if (str == "config")
{ // mo¿liwoœæ przedefiniowania parametrów w scenerii
Global::ConfigParse(NULL, &parser); // parsowanie dodatkowych ustawieñ
Global::ConfigParse(parser); // parsowanie dodatkowych ustawieñ
}
else if (str != "")
{ // pomijanie od nierozpoznanej komendy do jej zakoñczenia
@@ -2852,9 +2850,9 @@ bool TGround::Init(std::string asFile, HDC hDC)
else // jak liczba to na pewno b³¹d
Error("Unrecognized command: " + str);
}
else if (str == "")
/* else if (str == "")
break;
*/
// LastNode=NULL;
token = "";
@@ -2862,7 +2860,6 @@ bool TGround::Init(std::string asFile, HDC hDC)
parser >> token;
}
delete parser;
sTracks->Sort(TP_TRACK); // finalne sortowanie drzewa torów
sTracks->Sort(TP_MEMCELL); // finalne sortowanie drzewa komórek pamiêci
sTracks->Sort(TP_MODEL); // finalne sortowanie drzewa modeli
@@ -3787,15 +3784,15 @@ bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node)
&Event->Params[4].nGroundNode->pCenter);
//if (DebugModeFlag)
WriteLog("EVENT EXECUTED: AddValues & Track command - " +
string(Event->Params[0].asText) + " " +
to_string(Event->Params[1].asdouble) + " " +
to_string(Event->Params[2].asdouble));
std::string(Event->Params[0].asText) + " " +
std::to_string(Event->Params[1].asdouble) + " " +
std::to_string(Event->Params[2].asdouble));
}
//else if (DebugModeFlag)
WriteLog("EVENT EXECUTED: AddValues - " +
string(Event->Params[0].asText) + " " +
to_string(Event->Params[1].asdouble) + " " +
to_string(Event->Params[2].asdouble));
std::string(Event->Params[0].asText) + " " +
std::to_string(Event->Params[1].asdouble) + " " +
std::to_string(Event->Params[2].asdouble));
}
Event =
Event
@@ -3808,7 +3805,7 @@ bool TGround::AddToQuery(TEvent *Event, TDynamicObject *Node)
Event->fStartTime =
fabs(Event->fDelay) + Timer::GetTime(); // czas od uruchomienia scenerii
if (Event->fRandomDelay > 0.0)
Event->fStartTime += Event->fRandomDelay * random(10000) *
Event->fStartTime += Event->fRandomDelay * Random(10000) *
0.0001; // doliczenie losowego czasu opóŸnienia
++Event->iQueued; // zabezpieczenie przed podwójnym dodaniem do kolejki
if (QueryRootEvent ? Event->fStartTime >= QueryRootEvent->fStartTime : false)
@@ -3834,8 +3831,8 @@ bool TGround::EventConditon(TEvent *e)
else if (e->iFlags & conditional_propability)
{
double rprobability = 1.0 * rand() / RAND_MAX;
WriteLog("Random integer: " + CurrToStr(rprobability) + "/" +
CurrToStr(e->Params[10].asdouble));
WriteLog("Random integer: " + std::to_string(rprobability) + "/" +
std::to_string(e->Params[10].asdouble));
return (e->Params[10].asdouble > rprobability);
}
else if (e->iFlags & conditional_memcompare)
@@ -3979,14 +3976,14 @@ bool TGround::CheckQuery()
&tmpEvent->Params[4].nGroundNode->pCenter);
//if (DebugModeFlag)
WriteLog("Type: UpdateValues & Track command - " +
AnsiString(tmpEvent->Params[0].asText) + " " +
AnsiString(tmpEvent->Params[1].asdouble) + " " +
AnsiString(tmpEvent->Params[2].asdouble));
std::string(tmpEvent->Params[0].asText) + " " +
std::to_string(tmpEvent->Params[1].asdouble) + " " +
std::to_string(tmpEvent->Params[2].asdouble));
}
else //if (DebugModeFlag)
WriteLog("Type: UpdateValues - " + AnsiString(tmpEvent->Params[0].asText) +
" " + AnsiString(tmpEvent->Params[1].asdouble) + " " +
AnsiString(tmpEvent->Params[2].asdouble));
WriteLog("Type: UpdateValues - " + std::string( tmpEvent->Params[0].asText ) +
" " + std::to_string(tmpEvent->Params[1].asdouble) + " " +
std::to_string(tmpEvent->Params[2].asdouble));
}
break;
case tp_GetValues:
@@ -4193,14 +4190,14 @@ bool TGround::CheckQuery()
if (tmpEvent->Params[9].asMemCell) // jeœli by³a podana nazwa komórki
WriteLog("Memcell \"" + tmpEvent->asNodeName + "\": " +
tmpEvent->Params[9].asMemCell->Text() + " " +
to_string(tmpEvent->Params[9].asMemCell->Value1()) + " " +
to_string(tmpEvent->Params[9].asMemCell->Value2()));
std::to_string(tmpEvent->Params[9].asMemCell->Value1()) + " " +
std::to_string(tmpEvent->Params[9].asMemCell->Value2()));
else // lista wszystkich
for (TGroundNode *Current = nRootOfType[TP_MEMCELL]; Current;
Current = Current->nNext)
WriteLog("Memcell \"" + Current->asName + "\": " +
Current->MemCell->Text() + " " + to_string(Current->MemCell->Value1()) + " " +
to_string(Current->MemCell->Value2()));
Current->MemCell->Text() + " " + std::to_string(Current->MemCell->Value1()) + " " +
std::to_string(Current->MemCell->Value2()));
break;
case tp_Voltage: // zmiana napiêcia w zasilaczu (TractionPowerSource)
if (tmpEvent->Params[9].psPower)
@@ -4769,7 +4766,7 @@ bool TGround::RenderAlphaVBO(vector3 pPosition)
};
//---------------------------------------------------------------------------
void TGround::Navigate(String ClassName, UINT Msg, WPARAM wParam, LPARAM lParam)
void TGround::Navigate(std::string const &ClassName, UINT Msg, WPARAM wParam, LPARAM lParam)
{ // wys³anie komunikatu do steruj¹cego
HWND h = FindWindow(ClassName.c_str(), 0); // mo¿na by to zapamiêtaæ
if (h == 0)
@@ -4792,7 +4789,7 @@ void TGround::WyslijEvent(const std::string &e, const std::string &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(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + e + " sent");
CommLog( Now() + " " + std::to_string(r.iComm) + " " + e + " sent" );
};
//---------------------------------------------------------------------------
void TGround::WyslijUszkodzenia(const std::string &t, char fl)
@@ -4809,7 +4806,7 @@ void TGround::WyslijUszkodzenia(const std::string &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(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + t + " sent");
CommLog( Now() + " " + std::to_string(r.iComm) + " " + t + " sent");
};
//---------------------------------------------------------------------------
void TGround::WyslijString(const std::string &t, int n)
@@ -4825,7 +4822,7 @@ void TGround::WyslijString(const std::string &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(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + t + " sent");
CommLog( Now() + " " + std::to_string(r.iComm) + " " + t + " sent");
};
//---------------------------------------------------------------------------
void TGround::WyslijWolny(const std::string &t)
@@ -4905,7 +4902,7 @@ void TGround::WyslijNamiary(TGroundNode *t)
// WriteLog("Ramka gotowa");
Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData);
// WriteLog("Ramka poszla!");
CommLog(to_string(BorlandTime()) + " " + to_string(r.iComm) + " " + t->asName + " sent");
CommLog( Now() + " " + std::to_string(r.iComm) + " " + t->asName + " sent");
};
//
void TGround::WyslijObsadzone()
@@ -4913,7 +4910,7 @@ void TGround::WyslijObsadzone()
DaneRozkaz2 r;
r.iSygn = 'EU07';
r.iComm = 12; // kod 12
for (int i; i<1984; i++) r.cString[i] = 0;
for (int i=0; i<1984; ++i) r.cString[i] = 0;
int i = 0;
for (TGroundNode *Current = nRootDynamic; Current; Current = Current->nNext)
@@ -4947,7 +4944,7 @@ void TGround::WyslijObsadzone()
cData.lpData = &r;
// WriteLog("Ramka gotowa");
Navigate("TEU07SRK", WM_COPYDATA, (WPARAM)Global::hWnd, (LPARAM)&cData);
CommLog(to_string(BorlandTime()) + " " + to_string(r.iComm) + " obsadzone" + " sent");
CommLog( Now() + " " + std::to_string(r.iComm) + " obsadzone" + " sent");
}
//--------------------------------
@@ -5087,7 +5084,7 @@ void TGround::DynamicRemove(TDynamicObject *dyn)
};
//---------------------------------------------------------------------------
void TGround::TerrainRead(const AnsiString &f){
void TGround::TerrainRead(std::string const &f){
// Ra: wczytanie trójk¹tów terenu z pliku E3D
};
@@ -5122,8 +5119,7 @@ void TGround::TerrainWrite()
sk = new TSubModel(); // nowy submodel dla kawadratu
// numer kwadratu XXXZZZ, przy czym X jest ujemne - XXX roœnie na wschód, ZZZ roœnie
// na pó³noc
sk->NameSet(AnsiString(1000 * (500 + i - iNumRects / 2) + (500 + j - iNumRects / 2))
.c_str()); // nazwa=numer kwadratu
sk->NameSet( std::to_string(1000 * (500 + i - iNumRects / 2) + (500 + j - iNumRects / 2)).c_str() ); // nazwa=numer kwadratu
m->AddTo(NULL, sk); // dodanie submodelu dla kwadratu
for (Current = Rects[i][j].nRootNode; Current; Current = Current->nNext2)
if (Current->TextureID)
@@ -5187,7 +5183,6 @@ void TGround::TrackBusyList()
{ // wys³anie informacji o wszystkich zajêtych odcinkach
TGroundNode *Current;
TTrack *Track;
AnsiString name;
for (Current = nRootOfType[TP_TRACK]; Current; Current = Current->nNext)
if (!Current->asName.empty()) // musi byæ nazwa
if (Current->pTrack->iNumDynamics) // osi to chyba nie ma jak policzyæ